Git 总结

1. 介绍

Git是目前世界上最先进的分布式版本控制系统。
工作原理 / 流程:
img
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

2. 工作区和暂存区

2.1 版本回退

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id
  • 穿梭前,用 git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用 git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.2 本地版本库提交

  1. 将所有被修改文件从工作区添加至暂存区
    git add .
    
  2. 提交至本地分支
    # -m 为添加 comment
    git commit -m "..."
    # -a 为将所有修改文件不经过暂存区提交到本地版本库,一般不推荐使用
    git commit -m -a "..."
    # --amend 追加提交,在不增加一个新的 commit-id 的情况下将新修改的代码追加到前一次的commit-id 中
    git commit --amend
    
  3. 撤销修改
    • 场景1: 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout -- file
    • 场景2: 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令 git reset HEAD <file>,就回到了场景1,第二步按场景1操作
    • 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库
  4. 删除文件
    从版本库中删除, 先 git rm 删掉,然后 git commit

2.3 分支

2.3.1 常见操作

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name> 或者 git switch <name>
  • 创建 + 切换分支:git checkout -b <name> 或者 git switch -c <name>
  • 合并某分支到当前分支:git merge <name>
  • 删除分支:git branch -d <name>
  • clone 分支:git clone -b <branch_name> <git_address>
  • push 分支:git push origin <branch_name>

2.3.2 分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
git-br-policy

2.3.3 Bug 分支

  1. 暂存工作区
    # 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    git stash
    
  2. 切换到主分支, 新建分支进行修复 bug
    # 切换到主分支
    git checkout master
    # 新建 bug 分支
    git checkout -b issue-101
    
  3. 修复完后, 合并到 master
    git switch master
    git merge --no-ff -m "merged bug fix 101" issue-101
    
  4. 返回之前的开发分支
    git switch dev
    
  5. 恢复现场
    # 查看 stash 目录
    git stash list
    
    # 1.使用 apply 恢复, stash 内容不会删除, 需要用 drop 删除
    git stash apply
    # 2.使用 pop 恢复, 删除 stash 内容
    git stash pop
    
  6. 复制 bug commit 的修改至开发分支
    # 只是同步 bug-commit 那一次的修改
    git cherry-pick <bug-commit-id>
    

2.3.4 多人协作

  1. 首先,可以试图用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功

如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

Live in the future, then build what's missing.