如果不是你最近的提交,如何压缩你的提交

时间:2017-01-26 14:53:49

标签: git squash git-squash

如果这些是你最近提交的(Squash my last X commits together using Git

,那么压缩你的提交似乎很容易

但是,如果我想要压缩我的回购的一些不是最近的回复,请HEAD~3HEAD~6说明。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

这可以通过进行交互式rebase来完成。

如果您在提交master处有分支A,那么您创建了分支my-branch,其中包含提交BCDEF。您希望将提交BCD压缩到B'

确保您当前的分支是my-branch,并启动交互式rebase:

git rebase -i master

这将打开您的编辑器,其中包含将要执行的提交列表。每行代表一次提交,该行的第一个单词表示要对该提交执行的命令。将第一次提交(B)保留为pick,并将接下来两次提交(CD)的命令更改为squash。保存并关闭编辑器。

git处理完提交BCD后,将打开一个新编辑器,其中包含新提交B'的提交消息。这将包含来自原始提交的提交消息的组合,但您可以将其更改为您喜欢的任何内容。一旦提交消息成为您想要的消息,请保存并关闭编辑器。

git完成处理分支my-branch上的其余提交后,my-branch上的提交将为B'EF。< / p>

请注意,如果您没有推送提交,则应该只进行rebase。重新定位将改变提交的哈希值,如果其他人已经撤消了原始提交,则会导致问题。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果您尚未发布分支,则可以重写其历史记录而不会产生任何副作用。

假设历史记录为dateTo,目标是压缩A-B-C-D-E-F-G-H-I

C-D-E-F-G

新记录将为git checkout -b squash_branch G git reset C --soft git commit git cherry-pick H I