commit b0e5db36ed68d4562275adeb08001b1316a4da52
Merge: ea38baa 8220bb1
commit ea38baa3f46a48722987b8dd3892d2b8d81c4d1a
在这种情况下,我如何压缩这两个提交
我在用
git rebase -i HEAD~2
但这不起作用,因为它删除了 merge 提交并且不可用于挤压
最佳答案
所以这里要考虑两个因素:
一、几个方面rebase
merge 提交并不总是很好。我会回到那几次。
其次,您期望的结果并不完全清楚。如果现在你有类似的东西
x -- x -- M -- C <--(master)
\ /
A --- B
你想结束
x -- x -- ABC <--(master)
或者
x -- x -- MC <--(master)
\ /
A --- B
如果您想要带有
ABC
的版本,很简单。虽然 M
没有出现在 rebase 的 TODO 列表中,所有由 M
带入主线的提交| (即本例中的 A
和 B
)是。所以只需标记 B
和 C
为“ Squash ”。唯一要记住的是,这是历史重写,所以如果你已经推送了任何可以到达 A
的引用。 , B
, M
, 或 C
然后可能需要进行一些清理(请参阅“从上游 rebase 恢复”下的 rebase
文档)。如果您想要带有
MC
的版本,那么问题就很多了。不是说你不能得到它,但我认为你不能通过做 rebase
得到它。 ;还有,MC
将是一个“邪恶的 merge ”,这可能会导致 future 出现问题 rebase
也尝试(除其他外)。默认
rebase
尝试产生线性历史并且不会产生 merge 提交。您可以使用 --preserve-merges
生成 merge 提交。选项,但这与 -i
交互不佳(如果您尝试通过这样做来修改 merge ,我预计会出现几个可能的问题)。如果你不担心在 merge 提交中 stash 更改的问题,并且真的想产生像
MC
这样的提交。 ,那么这样做的方法是:首先,移动
master
引用回 M
同时保留来自 C
的更改在索引中。git checkout master
git reset --soft HEAD^
然后将更改直接重新应用到 merge 提交
git commit --amend
关于git - 如何用普通提交压缩 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888343/