如何压缩包含合并提交的提交

How to squash commits that contain a merge commit

有没有办法压缩具有合并提交的提交?当没有任何合并提交时,我能够压缩,但当有合并提交时我不知道该怎么做。

喜欢这两个提交。

这里我在合并之前建立了一个像你这样的图表:

* bbcdb99 (HEAD -> feature) d
| * d568728 (master) c
| * 8714c7f b
|/  
* f1aeb9a a

现在我将 master 合并到 feature 中:

*   264fc6c (HEAD -> feature) Merge branch 'master' into feature
|\  
| * d568728 (master) c
| * 8714c7f b
* | bbcdb99 d
|/  
* f1aeb9a a

好吧,如果我想将功能压缩到只有一个提交并擦除 合并提交,那么我不应该那样合并。我应该做一个壁球合并!然而,一切并没有丢失。我可以将软重置回 f1aeb9a 并进行新的提交:

$ git reset --soft f1aeb9a
$ git commit -m"new commit"

这给出了这个:

* e26b588 (HEAD -> feature) new commit
| * d568728 (master) c
| * 8714c7f b
|/  
* f1aeb9a a

现在“新提交”包含对功能所做的所有操作,包括来自主控的合并结果。但是当然我们已经失去了合并 commit.