如何在本地分支上压缩特定提交?

Mar*_*tin 14 git

我可以找到一些接近我想要的答案,但是我担心我对Git的经验不足以完全理解如何实现我想要的.

给定一个提交ABCDEFGHIJ的本地分支,我想将一些提交压缩在一起,以便最终得到相当于A-BCD-E-FGH-IJ的东西.

这可能吗?目的是在重新定位之后对本地分支执行此操作,但在合并回主分支之前,以便创建更简洁和信息丰富的历史记录.

cmb*_*ley 41

你可以这样做rebase.假设提交AJ位于branchname构建于其上的本地分支上master,您可以这样做:

git checkout branchname
git rebase -i master
Run Code Online (Sandbox Code Playgroud)

您将被阻止使用这样的交互式窗口:

pick A Commit message A
pick B Commit message B
pick C Commit message C
pick D Commit message D
pick E Commit message E
...
Run Code Online (Sandbox Code Playgroud)

交互式rebase为您的场景提供说明,因此您应该为C和D更改"选择"为"压缩"(对于G,H和J,相同):

pick A Commit message A
pick B Commit message B
squash C Commit message C
squash D Commit message D
pick E Commit message E
Run Code Online (Sandbox Code Playgroud)

这会将B,C和D压缩成单个提交,允许您更改提交消息.

如果您乐意使用B的提交消息,则可以使用"fixup"而不是"squash",并且不会提示您更新提交消息.

  • 您需要重新排序提交,以便E紧跟在A.交互式rebase为您提供了一个编辑器,允许您执行此操作; 只需在A行和B行之间移动E行,然后将"选择E"改为"壁球E"即可.因为您在此处更改了提交历史记录,所以您可能需要处理冲突. (7认同)
  • 如果我想将提交 E 压缩到 A,但 B、C、D 必须仍然保留怎么办? (2认同)

oiy*_*yio 8

git log --oneline
git checkout your-branch
git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)

写下您的评论,然后 :wq(write and quit) 并按 Enter。

git log --oneline
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述