如果这些是您最近的提交,那么压缩您的提交似乎很容易(使用 Git 将我最后的 X 提交一起压缩)
但是,如果我想压缩我的一些不是最近提交的 repo 提交,HEAD~3比如HEAD~6.
有没有办法做到这一点?
如果这些是您最近的提交,那么压缩您的提交似乎很容易(使用 Git 将我最后的 X 提交一起压缩)
但是,如果我想压缩我的一些不是最近提交的 repo 提交,HEAD~3比如HEAD~6.
有没有办法做到这一点?
这可以通过进行交互式变基来完成。
如果您master在 commit有分支A,然后您my-branch使用 commits B、C、D、E和F. 您想压缩提交B,C和.DB'
确保您当前的分支是my-branch,并启动交互式变基:
git rebase -i master
这将打开您的编辑器,其中包含将要执行的提交列表。每行代表一个提交,该行的第一个单词表示要在该提交上执行的命令。将第一个提交 ( B) 保留为pick,并将接下来的两个提交 (C和D) 的命令更改为squash。保存并关闭编辑器。
在 git 完成处理提交B、C和之后D,将打开一个新编辑器,其中包含新提交的提交消息B'。这将包含来自原始提交的提交消息的组合,但您可以将其更改为您想要的任何内容。一旦提交消息是您想要的,保存并关闭编辑器。
一旦 git 完成处理分支上的其余提交my-branch,提交my-branch将是B',E和F.
请注意,如果您没有推送您的提交,您应该只做一个变基。变基会改变你提交的哈希值,如果其他人已经提取了原始提交,这将导致问题。
git rebase -i HEAD~6
然后在交互式编辑器中将squash(您可以缩写为s)放在您想要压缩的提交前面,并将其他的保留为pick.
例子:
pick 043af87 message
s 8c0fa0e message
s b6c7116 message
pick c5d91a3 message
pick f20898f message
pick edcbad2 message
如果您还没有发布分支,您可以重写它的历史而不会产生任何副作用。
假设历史是A-B-C-D-E-F-G-H-I,目标是 squash C-D-E-F-G。
git checkout -b squash_branch G
git reset C --soft
git commit
git cherry-pick H I
新的历史将是A-B-S-H'-I'。