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

3

如何压缩具有合并提交的提交记录?如果没有合并提交,我可以进行压缩,但是当有合并提交时,我不知道如何操作。

就像这两个提交记录一样。

git tree


你正在使用哪种压缩方式? - tymtam
@matt 所以,我应该使用变基并压缩,而不是合并,对吗? - Burak Akyalçın
我不知道“应该”怎么做。我只是不明白为什么要合并,如果目标是删除合并提交。 - matt
@LeGEC 我只想让这两个提交合并成一个提交。 - Burak Akyalçın
以下是一个好的答案: https://dev59.com/MFwY5IYBdhLWcg3wPVxS#32842174。它告诉你如何将合并提交转换为普通提交(就像最初执行了 merge --squash 一样),然后你可以使用交互式 rebase 或软重置进一步压缩。但你会失去“合并”历史记录;你不能压缩合并提交,这个想法实际上没有意义。 - matt
显示剩余3条评论
1个回答

4

我已经构建了一个类似于合并之前的图表:

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

现在,我将主分支合并到功能分支:

*   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

现在,“新的提交”包括了在功能分支上进行的所有操作,包括从主分支合并而来的结果。但当然我们失去了合并的“提交”。

谢谢!这正是我在寻找的。 - Burak Akyalçın
1
很酷!重申一下,如果原始的“合并”是“合并压缩”,我们本可以更直接地到达这里。然后,如果您愿意,您可以使用交互式变基来进行分支压缩。但是,了解“reset --soft”加上“commit”是一种压缩形式很有用。请参阅我的遗憾文章:https://dev59.com/-3A75IYBdhLWcg3wAD7x#59675191 这是遗憾类型1。 - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接