Git rebase-在分叉点模式下提交选择
阅读Git rebase-在分叉点模式下提交选择,git,github,version-control,Git,Github,Version Control,阅读git-rebase和git-merge-baseman文档: 在使用git checkout-b topic origin/master创建主题分支之后,远程跟踪分支origin/master的历史记录可能已被重绕和重建,从而导致此分支的历史记录 形状: 其中,origin/master过去指向B3、B2、B1,现在它指向B,当origin/master位于B3时,您的主题分支从它的顶部开始。此模式使用 origin/master将B3作为分岔点,以便主题可以通过以下方式在更新的origi
git-rebase
和git-merge-base
man文档:
在使用git checkout-b topic origin/master创建主题分支之后,远程跟踪分支origin/master的历史记录可能已被重绕和重建,从而导致此分支的历史记录
形状:
其中,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
$fork\u point
将(如果我理解正确的话)作为提交对象B3
,因此提交B3..topic
将重设为源代码/主代码
分支
Q1为什么省略B3
commit有用?主题
分支的提交是建立在B3
提交之上的,因此省略它意味着它的修改将在源代码/主代码
分支的故事中丢失。对B3
commit和topic
分支进行重定基址将导致更清晰的历史记录,不是吗
Q2是否有人可以链接/简要描述git工作流中
--fork point
选项的实际使用案例?您认为$fork\u point
将是B3
我相信这里的意图是将B3
省略为“非您的承诺”
我认为Git的人在这里画的图表不太好。下面是我如何在不做太多更改的情况下重新绘制和重写它(尽管我可能只是重新编写每个提交的字母)
您首先克隆(或更新)一些(
origin
)存储库,这些存储库的图形以提交B3
结尾,然后创建一个主题分支并进行一些提交:
但是,在另一次git fetch
之后,您自己的提交图现在看起来像这样:
...--o---F---B3--B2--B1 <-- origin/master
\
G---H---I <-- topic
o---B1' <-- origin/foo
/
...o---F---B2'-o---o---o---B <-- origin/master
\
B3--G---H---I <-- topic
但你更愿意:
o---B1' <-- origin/foo
/
...o---F---B2'-o---o---o---B <-- origin/master
\
G'--H'--I <-- topic
o--B1'如果上游分支未更改历史记录,是否有任何关于--fork point
的用户案例?我看到的每个示例都描述了一种情况,即上游在您处理主题分支时修改了历史记录(例如,rebase、amend或filter分支)。@MikkoRantalainen:我认为不是:如果上游总是在增长而没有放弃以前的提交,fork point就不应该做任何事情。不过,在这种情况下,它也不会破坏任何东西。如果我是对的,那么只有当有人强迫master进入远程repo,让graph像答案的第三图中那样突然改变时,才会发生这种情况?@BreakingBenjamin:是的,很明显,--fork point
是为了解决上游强制推送问题。我认为这不是一个很好的实现,但是这里没有一个正确的行为。Myaliy的进化扩展理论上是一个更好的方法来处理它(实际上它是如何工作的,我不知道,没有使用它),但是进化不适合Git的实现。Git 2.24(Q4 2019),你也可以考虑。
o---B1' <-- origin/foo
/
...o---F---B2'-o---o---o---B <-- origin/master
\
B3--G---H---I <-- topic
o---B1' <-- origin/foo
/
...o---F---B2'-o---o---o---B <-- origin/master
\
B3'-G'--H'--I' <-- topic
o---B1' <-- origin/foo
/
...o---F---B2'-o---o---o---B <-- origin/master
\
G'--H'--I <-- topic