git - 将特定提交从开发移动到功能分支

时间:2018-06-07 15:52:36

标签: git

因此,在我们的git存储库中,一些提交(现在不是最近的提交)进入我们的开发分支,它应该在功能分支中。他们应该的分支是进一步发展的。提交结果仍然是尚未完成的功能,所以现在我们真的需要让它们脱离开发分支,以便我们可以回到有一个正常运行的开发分支。

有没有办法可以将特定提交从开发分支移动到功能分支的开头?不是100%熟悉git,所以如果需要任何其他信息,请询问。

2 个答案:

答案 0 :(得分:2)

尝试樱桃挑选。使用cherry pick,您可以将另一个分支的选定提交到当前分支。

https://git-scm.com/docs/git-cherry-pick

答案 1 :(得分:1)

首先,通常的免责声明:您想要做什么(即从分支机构删除提交)意味着rewriting history,所以请谨慎行事。

假设您的历史记录如下:

A--B--C--D--E develop
         \
          F--G feature

你想“移动” 1 B提交Cdevelopfeature,你可以用{ {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 ”)是新提交包含与BC相同的更改,但具有不同的提交ID,因为它们具有不同的父级。

此时,您可以通过以下方式从B分支中移除Cdevelop

git rebase --onto A C
# This means rebase the current branch on top of commit A instead of C

将导致B中无法再访问提交Cdevelop

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中“移动”提交的含义。