如果你不是你最近的那些,就要压缩你的提交
这个问题在这里已经有了答案:
这可以通过做一个交互式底座来完成。
如果您在提交A
处有分支master
,然后用提交B
, C
, D
, E
和F
创建了分支my-branch
。 你想挤压B
, C
和D
到B'
。
确保您的当前分支是my-branch
,并启动交互式分配:
git rebase -i master
这将打开您的编辑器,并提供将要执行的提交列表。 每行表示一次提交,并且该行的第一个单词表示要对该提交执行的命令。 将第一个提交( B
)作为pick
,并将后两个提交( C
和D
)的命令更改为squash
。 保存并关闭编辑器。
在git完成处理提交B
, C
和D
,一个新的编辑器将打开并提交新提交B'
提示消息。 这将包含来自原始提交的提交消息的组合,但您可以将其更改为任何您想要的内容。 一旦提交信息是你想要的,保存并关闭编辑器。
一旦混帐处理完提交的其他分支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
如果您尚未发布该分支,则可以重写其历史记录,而不会产生任何副作用。
假设历史是ABCDEFGHI
,目标是压扁CDEFG
。
git checkout -b squash_branch G
git reset C --soft
git commit
git cherry-pick H I
新的历史将是ABS-H'-I'
。
上一篇: How to squash your commits when not being your recent ones