zoukankan      html  css  js  c++  java
  • git 操作命令详解

    git

    什么是git

    开源的分布式版本控制系统, 用于高效的管理大小项目和文件

    代码管理工具

    • 防止代码丢失, 做备份
    • 代码版本管控, 设置节点, 多版本切换
    • 建立分支各自开发, 互不影响, 方便合并
    • 多人协调, 方便代码共享传输

    git 特点

    开源, 多在 *nix 下使用

    分布式管理工具 (svn 集中式)

    每台主机都有完整代码, 代码的交互是增量更新

    拥有更好的分支支持, 方便多人协调工作

    分布式

    • 由中间服务器来集中管理
    • 权限也由中央控制
    • 数据保密性更好, 因为只通过中央处理
    • 但是中央服务器如果炸了就gg
    • 而且全部依靠中央, 对网络之类的环境要求较高

    集中式

    • 无中央服务器, 每个主机都是均等的
    • 每个主机都可以保存代码以及推送给其他主机
    • 不论只要不是所有主机都炸了, 都可以从其他的主机获取到
    • 以及主机拉取的时候不依赖 中央服务器的环境, 更加安全快速

    git 实际工作模式

    虽然 分布式的git 不需要依靠中央节点

    但是 实际工作还是会定义中央主机, 工作模式模拟的是 集中式管理

    git 安装

    sudo  apt-get install git

    git 空间

    工作区  项目所在操作目录, 项目操作区域

    暂存区  用于记录工作区的工作(修改)内容

    仓库     将记录内容备份

    远程仓库  远程主机上的 git 仓库

    git 初始化配置

    git config

    配置系统所有用户

    git config --system [选项]
    配置文件位置:
    /etc/gitconfig

    配置当前用户

    git config --global [选项]
    配置文件:
    ~/.gitconfig

    配置当前项目

    git config [选项]
    配置文件: 项目目录
    /.git/config
    * 要求必须在项目下执行 * 顺序 项目>当前用户>所有用户

    配置用户名(必须要配置)

    sudo git config --system user.name yangtuo

    执行位置  任何位置

    实例

    tarena@tedu:~$ sudo git config --system user.name yangtuo
    [sudo] tarena 的密码:
    tarena@tedu:~$
    tarena@tedu:~$ cat /etc/gitconfig
    [user]
        name = yangtuo
    tarena@tedu:~$

    配置用户邮箱(必须要配置)

    sudo git config --global user.email 745206110@qq.com
    实例
    tarena@tedu:~$ sudo git config --global user.email 745206110@qq.com
    tarena@tedu:~$ cat ~/.gitconfig
    [user]
        email = 745206110@qq.com
    tarena@tedu:~$

    查看当前项目 配置信息

    git config --list
    实例
    tarena@tedu:~/git$ git config --list
    user.name=yangtuo
    user.email=745206110@qq.com
    core.repositoryformatversion=0
    core.filemode=true
    core.bare=false
    core.logallrefupdates=true
    core.editor=vscode
    tarena@tedu:~/git$

    git  基本操作

    初始化仓库

    将某个项目目录, 变为 git 操作目录, 生成 git 本地仓库
    该目录即可使用 git 进行管理

    git init

     实例

    tarena@tedu:~/git$ git init
    初始化空的 Git 仓库于 /home/tarena/git/.git/
    tarena@tedu:~/git$

    基本的空间操作示例图

    查看分支状态

    git status

    初始默认分支为 master

    当工作区和仓库 不一致的时候, 会有所提示

    将工作区内容记录到暂存区

    git add files
    git add file1, file2
    git add .

     ps 

      git add . 2.0 版本之后就可以支持所有的操作, 当然也包括删除文件也可以提交

      之前 1.0 版本 . 的操作是无法提交删除文件操作的

    取消文件暂存记录

    git commit -m 'add some files'

    将暂存区内容同步到仓库

    每次同步都需要添加 [msg] 同步信息 格式为字符串

    commit 操作只能同步暂存区已经记录的内容

    git commit -m [msg]

    查看 commit 日志

    一个是详细查看, 一个是简单查看

    git log
    git log --pretty=oneline

    实例

    tarena@tedu:~/git$ git log
    commit 3f8c95ebeb0998f9f4de793ceb856827a5da27fc
    Author: yangtuo <745206110@qq.com>
    Date:   Thu Mar 7 16:17:36 2019 +0800
    新添加了一个电子词典项目

    实例

    tarena@tedu:~/git$ git log --pretty=oneline
    3f8c95ebeb0998f9f4de793ceb856827a5da27fc 新添加了一个电子词典项目
    5f8a36d92345fc685381418125a69e63d9163df3 全部删掉
    9bcdb97cae7082b59b532c817b1e08e8cde3ec9a add some files
    tarena@tedu:~/git$

    文件比较

    用于比较工作区文件和仓库文件差异
    git diff [file]

    丢弃工作区的修改

    git checkout -- file

    从仓库恢复文件

    git checkout file

    移动 / 删除 文件并提交缓存

    git mv [file] [path]
    git rm [file]

    版本控制

    退回到上一个的 commit 节点

    git reset --hard HEAD^

    HEAD 是 commit 指针

    一个 ^ 代表后退一个

    通常不会写太多, 最多两个三个而已

    去往指定的 commit 操作节点

    git reset --hard [commit_id]

    commit_id 不需要全写, 前7位就够了

    去往指定的节点后, 在此节点后的所有版本会无法查看

    可以通过 git reflog 来全部查看

    查看所有的历史

    git reflog

    利用该操作,可以去往任意的历史位置

    标签操作

    标签创建

    git tag[名称] -m [message]

    标签  在工作的重要位置添加的快照, 保存当时的工作状态

    一般用于版本迭代等

    注意  message 可以不写, 但是最好添加

    查看所有标签

    git tag

    将标签 给指定的 commit_id 添加

    git tag [tag_name] [commit_id] -m [message]

    查看标签详细信息

    git show [tag]

    删除标签

     git tag -d [tag_name]

    去往某个标签节点

    git reset --hard[tag]

    临时工作区

    创建临时保存工作区

    让工作区回到修改前状态

    并且修改保存在一个临时工作区

    git stash

    查看临时工作区列表

    最新的工作区记录为 stash{0} 依次排列

    git stash list

    将临时应用到工作区

    git stash apply stash@{2}

    将临时工作区删除

    git stash drop [stash]  删除一个
    git stash clear     删除所有

    分支管理

    分支即每个人在原有代码基础上建立自己的工作环境, 独立开发, 不回干扰其他分支操作 完成后合并到主线

    多人开发建立分支优点: 安全, 不影响其他分支, 独立控制进度

    查看分支情况

    前面 * 的表示当前工作分支

    git branch

    创建新的分支

    git branch [branch]

    切换分支

    git checkout [branch]

    合并分支

    表示将某个基于当前分支建立的分支,合并过来

    合并分支过程中可能产生冲突,需要手动解决

    在分支操作中尽量添加新的模块,不要修改原有代码内容

    git merge [branch]

    删除分支

    未合并的分支是无法用 -d 删除的( 防手滑,防恶意手滑 )

    必须使用 -D 才可以删除未合并的分支

     git branch -d [branch]

    远程仓库管理

    远程仓库

    远程主机上的 git 仓库

    git 作为分布式结构 每台主机的 git 仓库结构相似 只是把其他主机上的 git 仓库作为远程仓库

    共享仓库

    git 分布式结构衍生了很多工作模式 共享仓库是常用的模式之一

    普通隐藏的 .git 仓库不能被其他主机获取代码 共享仓库即可以将 git 项目共享的仓库

    创建自己的远程仓库

    选择共享库目录,设置目录属主

    mkdir yangtuo_git
    chown tarena:tarena yangtuo_git

    初始化该目录为 git 仓库, 设置 bare 属性

     yangtuo 项目名称

    .git 习惯后缀

    cd gitrepo/
    git init --bare yangtuo.git

    将配置 git 目录设置为 和共享仓库目录相同的属主

    chown -R tarena:tarena yangtuo.git

    添加项目到共享仓库

    添加项目到共享仓库

    该操作要在本地的一个 git 项目中执行

    与远程连接默认使用 SSH 方法

    origin 是给远程主机起的名字

    git remote add origin tarena@127.0.0.1:/home/tarena/yangtuo_git/yangtuo.git

    删除远程主机

    连接多个远程主机的时候 远程名字不能重复

     git remote rm [origin]

    将本地分支推送到远程共享仓库

    -u 表示建立对应分支自动关联 一般首次向远程推送某个分支时使用

    git branch -a 查看链接的远程分支 git branch -r 只查看远程分支

     git push -u [origin] [branch]

    -f 本地强制上传到远程,把远程的覆盖

    git push -f origin master

    获取远程仓库项目

     git clone tarena@172.40.91.185:/home/tarena/gitrepe/tedu.git

    从远程获取最新代码

    clone 已经自动建立了关联, pull 可以直接拉取代码到对应分支

    git pull

    --rebase 拉取远程的文件把本地的覆盖

    git pull --rebase origin master

    从远程获取最新内容到本地

    制霸远程分支拿来 并不在合并

    若想合并 则在需要 git merge [branch]

    git fetch

    可以改拉取过来之后的分支名字

    git fetch origin master:tmp

    推送标签

    git push [origin] [tag]

    推送落后版本

    当当前版本落后于远程版本 无法更新时使用

    git push --force origin
  • 相关阅读:
    练习44-继承和组合
    CF 1329B Dreamoon Likes Sequences
    CF 1362C Johnny and Another Rating Drop
    CF 1391D 505
    CF 1383B GameGame
    CF1360F Spy-string(暴力)
    Java 之 关键字与标识符
    Java 之 Java 注释与 API
    Java 之 第一个Java程序
    Java 之 Java开发环境
  • 原文地址:https://www.cnblogs.com/shijieli/p/10498161.html
Copyright © 2011-2022 走看看