我有以下情况:
_____________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可能会发生这种情况吗?
谢谢!
答案 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