【发布时间】:2017-07-18 02:08:47
【问题描述】:
阅读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 时,您的主题分支在它之上启动。此模式使用 reflog origin/master 找到 B3 作为分叉点,以便主题可以通过以下方式在更新的 origin/master 之上重新建立:
$ fork_point=$(git merge-base --fork-point origin/master topic) $ git rebase --onto origin/master $fork_point topic
$fork_point 将(如果我理解正确的话)是提交对象B3,因此提交B3..topic 将重新基于origin/master 分支。
Q1 为什么省略B3 提交很有用? topic 分支的提交构建在 B3 提交之上,因此省略它意味着它的修改将在 origin/master 分支的故事中丢失。重新设置B3 提交和 topic 分支会导致更清晰的历史记录,不是吗?
Q2 有人可以链接/简要描述一下 git 工作流中--fork-point 选项的实际用例吗?
【问题讨论】:
-
使用 Git 2.24 (Q4 2019),也可以考虑
git rebase --keep-base <upstream>。
标签: git github version-control