阅读 git rebase
和 git merge-base
的手册文档:
在使用命令 git checkout -b topic origin/master 创建主题分支后,在这个分支上进行工作后,远程跟踪分支 origin/master 的历史可能已被倒回并重建,导致其历史形状如下:
o---B1 / ---o---o---B2--o---o---o---B (origin/master) \ B3 \ Derived (topic)
origin/master曾经指向提交B3、B2、B1,现在它指向了B,而您的主题分支是在origin/master指向B3时创建的。此模式使用origin/master的引用日志来找到B3作为分叉点,以便可以通过以下方式将主题分支重新设置在更新的origin/master之上:
如果我理解正确,将是提交对象
$ fork_point=$(git merge-base --fork-point origin/master topic) $ git rebase --onto origin/master $fork_point topic
B3
,因此提交B3..topic
将被变基到origin/master
分支上。Q1为什么省略
B3
提交是有用的?topic
分支的提交建立在B3
提交之上,因此省略它意味着在origin/master
分支的历史记录中将缺少其修改。重新设置B3
提交和topic
分支会导致更清晰的历史记录,是吗?Q2能否提供链接或简要描述git工作流程中
--fork-point
选项的实际用例?
git rebase --keep-base <upstream>
。 - VonC