3. 分支管理

3.1. 分支管理

Warning

Github 已经将 master 分支改名为 main。

  • git checkout -b dev 创建分支 dev,并切换到 dev 分支(此时可以正常 add、commit 等)。相当于下面两条指令:

    • git branch dev 创建分支

    • git checkout dev 切换分支

    从 master 分支创建 dev 分支,则 dev 分支的仓库已经包含了 master 分支的内容,但是在 master 分支下,无法看到 dev 分支新增或修改的内容。

  • git branch -r:查看远程分支,-a:查看所有分支(包括本地分支)。

  • git merge dev 把 dev 分支的内容合并到当前分支(如 master 分支)。

  • git branch -d dev (合并之后)删除 dev 分支。

流程如下(图片来源于 Git教程 - 廖雪峰的官方网站 ):

1. 初始状态: master 分支。

../_images/03_master.png

2. 创建并切换到 dev 分支。

../_images/03_create_branch.png

3. 更新 dev 分支。

../_images/03_commit_branch.png

4. 合并 dev 分支到 master 分支。

../_images/03_merge_branch.png

5. 删除 dev 分支。

../_images/03_delete_branch.png

git merge 会产生一条额外的 commit 记录,如果希望得到更干净、直观的记录,可以使用 git rebase 。rebase 操作还能用于合并多次提交记录。 但是不建议在公共分支(如 master)进行 rebase 操作,避免出现代码提交记录错乱和浪费存储空间的现象。

Note

协同开发场景下,在开发自己的分支时,要注意合并 master 分支的最新更新: git pull origin master ,手动解决冲突。

Tip

在所有分支中查找目标字符串:

git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "target_string"

3.2. 比较分支

Git 比较 Source 和 Destination 两个分支的时候,展示的 Diff 并不是当前两个分支中所有文件的 Diff,而是 将 Source 分支合入 Destination 分支时会带来的改变 。 也就是说,实际比较的是 Source 分支和 Merge Base 节点, Merge Base 节点是这两个分支的最近公共 commit 节点。

3.3. 参考资料

  1. Git和Github简单教程

  1. Git教程

  1. Git使用教程

  1. Git操作详解

  1. Using Git, how could I search for a string across all branches

  1. Comparing two branches yields different diffs

  1. git rebase与merge的区别