git壁球较早的提交(不是最后一个)

时间:2019-05-22 18:10:03

标签: git git-rebase

我的git历史非常混乱。我想压缩一堆较旧的提交(不包括最后一个)。

我知道如何压缩我的上次n次提交。但这是不同的。在这里,我连续n1n2提交,我想将其压缩为一个,而在n2之后,我有一个提交历史,我希望保留到最后一个。 >

因此,如果我当前的历史记录如下:

---- n1 --- n2 -------- m

我想将n1压成n2,所以最终看起来像这样:

---- n1n2 -------- m

其中n1n2是单个提交,其中包含从n1n2的压缩内容。

我应该怎么做?从n2m的历史记录有什么后果?

也就是说,由于我要执行的操作,从n2m的每次提交的哈希会改变吗?

1 个答案:

答案 0 :(得分:3)

您可以按照the docsthis blog post进行交互式变基。

  1. 启动交互式变基:

    git rebase -i HEAD~n
    

    n是您想追溯到多远的历史

  2. 您的默认编辑器将打开。在顶部,将以相反的顺序显示最新的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
    
  3. 为要压缩的所有提交指定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将更改和更改直接应用于更改,并使您将提交消息合并在一起。

  4. 保存并退出。

  5. Git将应用所有更改,并再次打开您的编辑器以合并三个提交消息。您可以修改您的提交消息,也可以保持原样(如果这样,所有提交的提交消息将被串联在一起)。

  6. 您完成了!您选择的提交将全部与上一个相同。