变基如何在非快进合并中模拟快进?

时间:2019-06-13 21:09:07

标签: git merge git-merge rebase git-rebase

bitbucket documentation说:

  

非快进合并是一种合并,其中主分支在分支点和合并回主节点之间存在中间更改。在这种情况下,用户可以通过重新定级而不是合并来模拟快进。通过放弃一些提交并创建新的提交来进行基础调整工作。

假设我们有一个非快进合并:

- o - o - o - H - A - B - C   <-- master (HEAD)
               \
                P - Q - R   <-- origin/master

根据以上来自bitbucket文档的引用,重新基准化可以模拟快进。但是,通过执行以下命令:

git checkout master
git pull --rebase
git rebase调用的

git pull --rebase,仅将已检出的分支master中的提交提交,并将其添加到origin / master的新库中,结果是:

- o - o - o - H - P - Q - R - A' - B' - C'   <-- master (HEAD)
                          |
                          <-- origin/master

主分支的指针快速指向(如果可能的话)快速指向(即,在时间上向前移动),以指向要合并的分支的最后一次提交。但是,如第二提交图所示,重新设置基准导致HEAD处于C',这与快进不同,因为如第二提交图所示,重新设置基准创建了3个新提交A',{{ 1}}和B'而不是快进master分支的指针来匹配合并的提交(快进会使HEAD位于C')。

那么R如何在非快进合并中模拟快进,还是bitbucket文档中的语句不正确?

1 个答案:

答案 0 :(得分:1)

将是“快进样”(在重新设置基础之后)是“ git push”:master将被简单地更新为origin在本地和远程提交。
(假设其他人同时没有将其他提交推送到- o - o - o - H - P - Q - R - A' - B' - C' <-- master (HEAD) | <-- origin/master git push - o - o - o - H - P - Q - R - A' - B' - C' <-- master (HEAD), origin/master

- o - o - o - H - P - Q - R - A' - B' - C'   <-- origin/master
                          |
                          <-- master (HEAD)

git pull: fetch + fast-forward merge 

- o - o - o - H - P - Q - R - A' - B' - C'   <-- master (HEAD), origin/master

因此,rebase + push的最终结果将与快进合并相同,在该合并中,master将在 origin / master之后

return animal;