非快进合并是一种合并,其中主分支在分支点和合并回主节点之间存在中间更改。在这种情况下,用户可以通过重新定级而不是合并来模拟快进。通过放弃一些提交并创建新的提交来进行基础调整工作。
假设我们有一个非快进合并:
- 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文档中的语句不正确?
答案 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;