git挤压旧提交(不是最后一个)
我有一个非常混乱的git历史。我想压缩一堆旧的提交(不包括最后一个) 我知道如何挤压我最后的git挤压旧提交(不是最后一个),git,git-rebase,Git,Git Rebase,我有一个非常混乱的git历史。我想压缩一堆旧的提交(不包括最后一个) 我知道如何挤压我最后的n提交。但这是不同的。在这里,我连续提交了n1到n2,我想将其压缩成一个,而在n2之后,我有一个提交历史记录,我想保存到最后一个 因此,如果我当前的历史记录如下所示: ---- n1 --- n2 -------- m ---- n1n2 -------- m 我想把n1挤压到n2上,结果是这样的: ---- n1 --- n2 -------- m ---- n1n2 -------- m 其中
n
提交。但这是不同的。在这里,我连续提交了n1
到n2
,我想将其压缩成一个,而在n2
之后,我有一个提交历史记录,我想保存到最后一个
因此,如果我当前的历史记录如下所示:
---- n1 --- n2 -------- m
---- n1n2 -------- m
我想把n1
挤压到n2
上,结果是这样的:
---- n1 --- n2 -------- m
---- n1n2 -------- m
其中,n1n2
是单个提交,包含从n1
到n2
的压缩内容
我该怎么做?从n2
到m
对历史有什么影响
也就是说,从
n2
到m
的每次提交的哈希值是否会因为我想做的事情而改变?您可以根据和执行交互式重基
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同时应用该更改和它之前的更改,并使您将提交消息合并在一起1.交互式重基,请参见。2.n1的每一次提交都会被重写,是的。@jornsharpe只是为了确认,从
n2+1
到m
的所有提交也会得到新的哈希值?是的,因为它们现在都有新的父提交。@jornsharpe So提交1,…,n1
将保留它们的哈希值,即使其中一些包含在交互式重基中,但使用了pick
。不一定,提交时会用到一些东西,包括时间戳:。只是为了确认。在本例中,提交2、3、4将被压缩为单个提交,我们称之为提交2*
。我的新历史记录看起来将包含提交1、2*、5、6
。此外,1
将保留其旧的SHA-1,但2*、5、6
都将获得新的SHA-1哈希。我说的对吗?@becko correct--commit 2*得到一个新的哈希,因为commit的内容现在不同了;提交5和6获取新哈希,因为它们的父提交ID已更改。有关详细信息: