理解带有意外提交和未完成提交的分支上的rebase的git问题
我们有一些问题与一个分支机构在过去不知何故搞砸了。。。以下情况:理解带有意外提交和未完成提交的分支上的rebase的git问题,git,rebase,git-rebase,Git,Rebase,Git Rebase,我们有一些问题与一个分支机构在过去不知何故搞砸了。。。以下情况: D是一个交付分支,我们从供应商处接收更改 M是主分支 F是一个特征分支 来自D的提交合并到M F用M重设基址 M包含F(F2)的意外提交,M3是该提交的还原 有没有解释为什么将F1-F2-F3重新固定到F2-M3上会使F2松动 似乎有效的方法是将F中的所有更改压缩为一个提交,然后进行重新基址,在这种情况下,F2中引入的更改仍然存在 我试图用rebase交互模式重写M的历史,并保留合并。。。我的想法是删除意外提交(F2)和它的恢
- D是一个交付分支,我们从供应商处接收更改
- M是主分支
- F是一个特征分支
- 来自D的提交合并到M
- F用M重设基址
- M包含F(F2)的意外提交,M3是该提交的还原
我猜
F
上的F2
是F
上的F2
的一个精选,而不是如图所示的合并
在重定基址时,git将挑选F
中但不在M
中的所有提交,因为F2
在两个分支中,它不会挑选它
如果您想保留它,一个解决方案是使用git-rebase
的所有参数:
git rebase --onto M $(git merge-base F M) F
# equivalent to:
# git rebase --onto M D1 F
这将重新确定F
中所有提交的基础,但不会在M
和F
(D1
)==>F1-F2-F3
的共同祖先中,在M
的末尾
另一种解决方案是执行交互式重基(
git-rebase--interactive mf
),然后在重基todo中显式添加pick F2
:
pick F1
pick F2
pick F3
图表只是一个情况的例子,不确定变化是如何发生的。但是你的解释是可以理解的,谢谢!我的同事正在研究这个分支,在壁球解决方案之后,他已经离开了。。。下次遇到这种情况时,我们将尝试您建议的重新设置基础。
git pull --rebase origin master
git rebase --onto M $(git merge-base F M) F
# equivalent to:
# git rebase --onto M D1 F
pick F1
pick F2
pick F3