Git 整合远端分支修改图例

114 阅读2分钟

!!提交历史的区别

  • merge:会保留远端分支新增修改的历史。
  • rebase:会修改远端分支新增修改的历史。

变基的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。

BAD case:如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟。

1、git merge 整合远端分支修改:三方合并

你的开发历史是从一个更早的地方开始分叉开来(diverged),Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的公共祖先(C2),做一个简单的三方合并。

和之前将分支指针向前推进所不同的是,Git 将此次三方合并的结果做了一个新的快照并且自动创建一个新的提交指向它。 这个被称作一次合并提交,它的特别之处在于他有不止一个父提交。 image.png

2、git rebase 整合远端分支修改:变基

还有一种方法:你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。 在 Git 中,这种操作就叫做 变基(rebase) 。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。 image.png image.png

本地分支和远端分支差异

  1. 我从f4265节点牵出分支开发feature。
  2. 其他人向远端提交两个commit,现在远端分支的head指向190a3。
  3. 而我本地也有两个提交,现在我本地分支的head指向893cf。
  4. 我使用git fetch之后,git图例是这样的:

image.png