在 Git 中将一个分支分成两个
Split one branch into two in Git
我有一个完全线性历史的项目:
master A – B – C – D – E – F – G – H
我想将它分成两部分:develop
包含大部分提交,master
,其中 develop
仅在里程碑处合并:
master A – – – D – – – – – H
\ / /
develop B – C – E – F – G
你的图表没有意义;例如,您不能按照绘制的方式移动 D。此外,如果没有其他人在 master
上工作,那么在 master
上进行单独的合并提交就没有意义,因为它可以快速转发到 [=] 15=].
尽管如此,我们可以通过在历史的各个阶段强制存在合并提交来完成您描述的 一般 事情。好的,所以 master
目前在 H。我们开始:
创建一个分支develop
但不要签出。
您还在 master
。将 --hard
重置为 A(使用 SHA 编号)。所以现在 master
在 A,develop
变成 A-B-C-D-E-F-G-H。
你在 master
仍然。 Merge D --no-ff
(使用它的 SHA)以获得一个很好的合并提交。沿 develop
合并您认为有意义的中转点的任何其他地方。
结账 develop
并继续工作。
我来示范。我们有这个:
* ddb5eeb (HEAD -> master) f
* d995c3c e
* a1f5432 d
* b6c9729 c
* b15090c b
* ee1de04 a
现在:
$ git branch develop
$ git reset --hard ee1d
$ git merge --no-ff a1f5
$ git merge --no-ff develop
$ git checkout develop
现在我们有了这个:
* 2ad4bb2 (master) Merge branch 'develop'
|\
| * ddb5eeb (HEAD -> develop) f
| * d995c3c e
* | c6f43e4 Merge commit 'a1f5'
|\ \
| |/
| * a1f5432 d
| * b6c9729 c
| * b15090c b
|/
* ee1de04 a
...这正是您所说的想要的东西。
我有一个完全线性历史的项目:
master A – B – C – D – E – F – G – H
我想将它分成两部分:develop
包含大部分提交,master
,其中 develop
仅在里程碑处合并:
master A – – – D – – – – – H
\ / /
develop B – C – E – F – G
你的图表没有意义;例如,您不能按照绘制的方式移动 D。此外,如果没有其他人在 master
上工作,那么在 master
上进行单独的合并提交就没有意义,因为它可以快速转发到 [=] 15=].
尽管如此,我们可以通过在历史的各个阶段强制存在合并提交来完成您描述的 一般 事情。好的,所以 master
目前在 H。我们开始:
创建一个分支
develop
但不要签出。您还在
master
。将--hard
重置为 A(使用 SHA 编号)。所以现在master
在 A,develop
变成 A-B-C-D-E-F-G-H。你在
master
仍然。 Merge D--no-ff
(使用它的 SHA)以获得一个很好的合并提交。沿develop
合并您认为有意义的中转点的任何其他地方。结账
develop
并继续工作。
我来示范。我们有这个:
* ddb5eeb (HEAD -> master) f
* d995c3c e
* a1f5432 d
* b6c9729 c
* b15090c b
* ee1de04 a
现在:
$ git branch develop
$ git reset --hard ee1d
$ git merge --no-ff a1f5
$ git merge --no-ff develop
$ git checkout develop
现在我们有了这个:
* 2ad4bb2 (master) Merge branch 'develop'
|\
| * ddb5eeb (HEAD -> develop) f
| * d995c3c e
* | c6f43e4 Merge commit 'a1f5'
|\ \
| |/
| * a1f5432 d
| * b6c9729 c
| * b15090c b
|/
* ee1de04 a
...这正是您所说的想要的东西。