git 压缩旧的提交(不是最后一个)
git squash older commits (not last one)
我有一段非常混乱的 git 历史。我想压缩一堆旧的提交(不包括最后一个)。
我知道如何压缩我最后的 n
提交。但这是不同的。在这里,我连续提交了 n1
到 n2
,我想将其压缩成一个,而在 n2
之后,我有一个提交历史,我想保留到最后一个。
所以,如果我当前的历史是这样的:
---- n1 --- n2 -------- m
我想将 n1
压缩为 n2
,所以它最终看起来像这样:
---- n1n2 -------- m
其中 n1n2
是包含从 n1
到 n2
.
压缩内容的单个提交
我应该怎么做?从n2
到m
对历史有什么影响?
也就是说,从 n2
到 m
的每个提交的哈希值是否会因我想做的事情而改变?
您可以根据 the docs and 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 将应用所有更改并将再次打开您的编辑器以合并三个提交消息。您可以修改您的提交消息或保持原样(如果是这样,所有提交的提交消息将被连接起来)。
大功告成!您选择的提交将全部与前一个一起压缩。
我有一段非常混乱的 git 历史。我想压缩一堆旧的提交(不包括最后一个)。
我知道如何压缩我最后的 n
提交。但这是不同的。在这里,我连续提交了 n1
到 n2
,我想将其压缩成一个,而在 n2
之后,我有一个提交历史,我想保留到最后一个。
所以,如果我当前的历史是这样的:
---- n1 --- n2 -------- m
我想将 n1
压缩为 n2
,所以它最终看起来像这样:
---- n1n2 -------- m
其中 n1n2
是包含从 n1
到 n2
.
我应该怎么做?从n2
到m
对历史有什么影响?
也就是说,从 n2
到 m
的每个提交的哈希值是否会因我想做的事情而改变?
您可以根据 the docs and 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 将应用所有更改并将再次打开您的编辑器以合并三个提交消息。您可以修改您的提交消息或保持原样(如果是这样,所有提交的提交消息将被连接起来)。
大功告成!您选择的提交将全部与前一个一起压缩。