因此,在我们的git存储库中,一些提交(现在不是最近的提交)进入我们的开发分支,它应该在功能分支中。他们应该的分支是进一步发展的。提交结果仍然是尚未完成的功能,所以现在我们真的需要让它们脱离开发分支,以便我们可以回到有一个正常运行的开发分支。
有没有办法可以将特定提交从开发分支移动到功能分支的开头?不是100%熟悉git,所以如果需要任何其他信息,请询问。
答案 0 :(得分:2)
尝试樱桃挑选。使用cherry pick,您可以将另一个分支的选定提交到当前分支。
答案 1 :(得分:1)
首先,通常的免责声明:您想要做什么(即从分支机构删除提交)意味着rewriting history,所以请谨慎行事。
假设您的历史记录如下:
A--B--C--D--E develop
\
F--G feature
你想“移动” 1 从B
提交C
和develop
到feature
,你可以用{ {3}}命令:
git checkout develop
git rebase --onto feature A C
# This will apply commits B and C on top of the commit referenced by "feature"
现在您的历史记录将如下所示:
A--B--C--D--E develop
\
F--G--B'--C' feature
请注意,B'
和C'
(读取“ B prime ”和“ C prime ”)是新提交包含与B
和C
相同的更改,但具有不同的提交ID,因为它们具有不同的父级。
此时,您可以通过以下方式从B
分支中移除C
和develop
:
git rebase --onto A C
# This means rebase the current branch on top of commit A instead of C
将导致B
中无法再访问提交C
和develop
:
A--D'--E' develop
A--B--C--D
\
F--G--B'--C' feature
但是,您仍然使用基于旧提交feature
的{{1}},现在已将其重写为D
。要解决此问题,请再次在新D'
之上重新定位feature
:
D'
最终导致:
git checkout feature
git rebase --onto D' D
这可能是你想要的。
1)请参阅rebase --onto
的@WilliamPursell,了解在Git中“移动”提交的含义。