Git在分支中排除提交

时间:2010-03-25 22:49:41

标签: git commit revert

我有一个提交,我已经存储在一个分支中,因为这应该只发送到一个特定的框。

我已将它合并到分支主服务器,但不是我在本地使用的分支dev。

现在,我错误地将master合并到dev,并将此提交引入了dev。

我知道可以git revert sha,to branch dev;但是因为这将引入一个撤消提交的提交(我猜,我还没有完全尝试过这个),当我合并master时,这个提交也会撤消吗?

如果是,如何仅从分支dev撤消此提交。

哦,git reset HEAD^1 --hard不是一个选项,因为在不需要的提交之后,master上还有其他提交。

如果再次重新设置并且apply是唯一的选项,那么除了不需要的提交之外,我如何才能合并那些来自master的额外提交。

更新

这是提交树。看起来很复杂我已经指出了我在开发中不需要的提交。 (我也删除了任何个人身份信息,感谢理解。截图gitk比ascii艺术要简单得多。) alt text

提前致谢!

2 个答案:

答案 0 :(得分:17)

在分支的临时副本git rebase --interactive上,删除不需要的提交。或者,您可以在不需要的提交的上游创建一个新分支,并在其上git cherry-pick提交所需的提交。

可能有更多方法可以实现这一目标。

答案 1 :(得分:2)

git reflog,然后git reset --hard是你的朋友撤消错误。

为了在合并分支时避免单个提交,这就是我刚在项目中使用的内容:

  • 假设:从分支B合并到头部。
  • 确定要避免的提交的撤销(R0)
  • 确定R0(R1)之前提交的提交

    git merge <R1>
    git merge -s ours R0
    git merge B