我有点困惑。我有一个git历史如下(*表示合并提交):
A - B - C* - D - E - F* (master) - H* - I - J - K (feature)
\ /
\- - - - - - - - - - G
然后我运行了git rebase -i master feature
,并在todo列表中将r
放在commit G
前面以保留它(同时更改提交消息)和s
在其他一切之前将它们压在一起。我希望得到这个:
Y (feature), containing G', H', I', J', K'
/
A - B - C* - D - E - F* (master)
相反,我得到了这个:
X (feature), containing F`?, G', H', I', J', K'
/
A - B - C* - D - E - F* (master)
我认为X包含F'
以及G' - K'
,因为它有来自该合并的更改,并且因为rebase为其提供了与F'
相同的作者,一位只出现的作者在X
,D
和F*
。
这里出了什么问题?这是因为git rebase忽略了合并提交,因此它不会接受合并提交作为<upstream>
和<branch>
参数的共同祖先吗?正在运行git log master..K
只会显示提交G - K
。
避免这种情况的正确方法是什么?我在其他地方读过,-i
和-p
标志不能同时使用。
更新
对于它的价值,我已经包含了git log
图表的屏幕截图。随着时间的推移,绿色和黄色的线条最终会加入,粉红色线条的早期加入。