我目前有一个分支develop
,其中包含来自另一个分支develop-2
的约30个提交的压缩合并提交。这个压扁的提交不在HEAD
,可能在HEAD
之前提交20-30左右。我仍然拥有develop-2
分支,包含它所构成的所有单独提交。
如何在这个存储库中执行Git手术以解压缩"解压缩"压缩提交并将其替换为Git历史记录中的develop-2
分支的个别提交?
答案 0 :(得分:3)
我会在压缩提交之前签出提交,创建一个分支并合并你的未压缩提交。
然后git cherry-pick
来自旧历史的提交范围在此新分支之上。
如下所示。
B' = squashed b2
A B' C D
dev - - * - - * - - * -- *
dev2 \ - - * - - * - - *
b1 b2 b3
Step 1 & 2: `git checkout <sha-A> && git checkout -b d3 && git merge dev2`
A B' C D
dev - - * - - * - - * -- *
d3 - - * - - b1 - - b2 - - b3
Step 3: `git cherry-pick <sha B'>..dev`
d3 - - A - - b1 - - b2 - - b3 - - C - - D
上述步骤对您当前的分支机构没有破坏性。
答案 1 :(得分:0)
使用&#39; git rebase --onto&#39;不应该太难。
答案 2 :(得分:0)
假设你的分支结构如下图(C'是来自\chapter{Introduction}
的压缩合并):
develop-2
您可以在A---C0---B---C’---D---...---X develop
\
C1---C2---...---C30 develop-2
分支上使用这些步骤解压缩C’
:
<强> 1。develop
强>
git rebase --onto <commit id for B> <commit id for C0> <commit id for C30>
<强> 2。 C1’---C2’---...---C30’ HEAD
/
A---C0---B---C’---D---...---X develop
\
C1---C2---...---C30 develop-2
强>
git rebase --onto <commit id now HEAD is> <commit id for C’> develop