我的git历史非常混乱。我想压缩一堆较旧的提交(不包括最后一个)。
我知道如何压缩我的上次n
次提交。但这是不同的。在这里,我连续n1
到n2
提交,我想将其压缩为一个,而在n2
之后,我有一个提交历史,我希望保留到最后一个。 >
因此,如果我当前的历史记录如下:
---- n1 --- n2 -------- m
我想将n1
压成n2
,所以最终看起来像这样:
---- n1n2 -------- m
其中n1n2
是单个提交,其中包含从n1
到n2
的压缩内容。
我应该怎么做?从n2
到m
的历史记录有什么后果?
也就是说,由于我要执行的操作,从n2
到m
的每次提交的哈希会改变吗?
答案 0 :(得分:3)
您可以按照the docs和this blog post进行交互式变基。
启动交互式变基:
git rebase -i HEAD~n
(n
是您想追溯到多远的历史
您的默认编辑器将打开。在顶部,将以相反的顺序显示最新的n
提交列表。例如:
pick a5f4a0d commit-1
pick 19aab46 commit-2
pick 1733ea4 commit-3
pick 827a099 commit-4
pick 10c3f38 commit-5
pick d32d526 commit-6
为要压缩的所有提交指定squash
(或快捷方式s
)。例如:
pick a5f4a0d commit-1
pick 19aab46 commit-2
squash 1733ea4 commit-3
squash 827a099 commit-4
pick 10c3f38 commit-5
pick d32d526 commit-6
Git将更改和更改直接应用于更改,并使您将提交消息合并在一起。
保存并退出。
Git将应用所有更改,并再次打开您的编辑器以合并三个提交消息。您可以修改您的提交消息,也可以保持原样(如果这样,所有提交的提交消息将被串联在一起)。
您完成了!您选择的提交将全部与上一个相同。