git merge / rebase / cherrypick跳过对主控的提交

时间:2018-12-19 18:22:45

标签: git git-merge git-rebase git-cherry-pick

我有以下情况:

   _____________G ..myBranch
  /
 /
S---B---C1---C2---C3---C..---C230 .. master

S=working version
B=bad version of task
G=good version of task
C=commit after B

,我想在不使用B的情况下提交并合并master到myBranch中,然后使用新的提交将myBranch合并到master中。使用merge / rebase / cherrypicks可能会发生这种情况吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

是的。您可以这样做:

git checkout mybranch
git rebase -i master

这将为您提供一个屏幕,您可以在其中选择要包含的提交。删除具有提交B的行,保存并关闭编辑器。

另请参阅:https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

答案 1 :(得分:2)

git rebase 答案应该可以,但是如果您想知道Cherry-pick的工作原理,可以改用它,如下所示:

git checkout myBranch
git cherry-pick C1..master

这将基于 master 中的 C1 C230 的提交差异在myBranch中创建新的提交(与使用rebase相同) -我会的。)

如果您尚未发布 master ,并且可以重写历史记录,则可以使用 git reset 更新master:

git checkout master
git reset --hard myBranch

如果您发布了 master ,则不建议这样做。相反,您可以使用 ours 策略将 master 合并为 myBranch ,然后将 master 合并为 myBranch

git checkout myBranch
git merge -s ours master
git checkout master
git merge myBranch