[英]Move initial commits off master to another branch in Git
我正在尝试迁移到GitFlow工作流程,我想重写存储库的历史记录,以便所有这些都符合新的存储库。
目前它看起来像这样:
Master: A - B - C - D - E - F - - - - - - - - - L
\ /
Release: \ J - K
\ / \
Development: G - H - I M
我希望它看起来像这样:
Master: A - - - - - - - - - - - - - - - - - - - L
\ /
Release: \ J - K
\ / \
Development: B - C - D - E - F - G - H - I M
我已经尝试在这里寻找答案了,我找到了答案 ,但是如果你要创建新的分支,而不是使用已经存在的分支,它似乎才有效。
提前谢谢了。
在Git中,正如larsmans在他的评论中所指出的,分支只是指向特定提交的指针/引用。 像在图表左侧那样使用分支名称标记代码行可能会造成混淆。
例如,在过去,承诺G
, H
和I
只是development
分支的祖先的一部分可能是真的。 但是,在您的repo的当前状态中,它们属于所有三个分支( master
, development
和release
)的祖先。
认为那三个提交( G
, H
和I
)在某种程度上仍然与development
分支更相关而不是master
或release
不再有任何意义,仅仅因为你的repo不记得分支引用指向哪里过去(尽管该信息存储在本地存储在称为reflog的东西中)。 你的Git repo只知道分支引用在当前指向的位置。
因此,当您绘制图形来描述您的repo所处的状态时,如果分支指向提交,则使用相应的分支名称标记提交本身更有意义。 我在下面的所有图表中都这样做了。
A - B - C - D - E - F - - - - - - - - - L [master]
\ /
G - H - I - J - K [release]
\
M [development]
A - - - - - - - - - - - - - - - - - - - L' [master]
\ /
B - C - D - E - F - G - H - I - J - K [release]
\
M [development]
要以此状态结束,您应该执行以下三个步骤。
master
分支 git checkout master
之后, HEAD
指向master
:
A - B - C - D - E - F - - - - - - - - - L [HEAD -> master]
\ /
G - H - I - J - K [release]
\
M [development]
master
犯 git reset --hard <commit_ID_of_A>
因为您的仓库中的任何引用都无法再访问L
,因此它会从历史图表中“消失”,并且您只需要保留
A [HEAD -> master]
\
B - C - D - E - F - G - H - I - J - K [release]
\
M [development]
release
到master
在这个阶段,如果你只是简单地跑
git merge release
因为master
的提示是release
提示的祖先,所以会发生快进合并,你最终会得到
A - B - C - D - E - F - G - H - I - J - K [HEAD -> master,release]
\
M [development]
这不是你想要的。 因此,需要--no-ff
选项来强制执行真正的合并,这里:
git merge --no-ff release
在最后一个命令之后,您的repo应该处于所需的状态:
A - - - - - - - - - - - - - - - - - - - L' [HEAD -> master]
\ /
B - C - D - E - F - G - H - I - J - K [release]
\
M [development]
请注意,我昵称新提交L'
而不是L
因为这两个提交具有不同的父级: L
的父级是F
和K
,而新提交的父级L'
是A
和K
这应该做你想要的,(虽然我不确定你的发布分支)
git checkout master
git reset --hard commit_A # the commit id for A
git merge --no-ff release
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.