git squash较旧的提交(不是最后一个)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (206)

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

我知道如何压制我最后的n提交。但这是不同的。在这里,我连续提交n1n2我想要压缩成一个,而在n2我有一个提交历史后,我想保留到最后一个。

所以,如果我目前的历史是这样的:

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

我想挤压n1n2所以最终看起来像这样:

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

其中n1n2是一个包含来自n1to 的压缩内容的提交n2

我该怎么做?对历史的影响n2m什么?

也就是说,每次提交的哈希都会因为我想做什么n2m改变?

提问于
用户回答回答于

你可以做一个交互式的rebase [1] [2]

  1. 启动交互式rebase:
git rebase -i HEAD~n (where ’n’ is how far do you want to go back in history)
  1. 您的默认编辑器将打开。在顶部,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
  1. 为要压缩的所有提交指定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将更改和更改直接应用于它之前,并使您将提交消息合并在一起。

  1. 保存并退出。
  2. Git将应用所有更改,并将再次打开您的编辑器以合并三个提交消息。您可以修改提交消息或保持原样(如果是这样,将连接所有提交的提交消息)。
  3. 你完成了!您选择的提交将全部与前一个提交相关。

扫码关注云+社区

领取腾讯云代金券