14

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

我已将它合并到我在本地使用的分支 master,但没有合并到分支 dev。

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

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

如果是这样,我如何仅从分支开发撤消此提交。

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

如果再次重置并应用是唯一的选择,那么我如何仅合并来自 master 的那些额外提交,而不是不需要的提交。

更新:

这是提交树。看起来很复杂。我已经指出了我在开发中不需要的提交。(我还删除了任何个人身份信息,感谢理解。截屏gitk比截屏ascii art简单得多。) 替代文字

提前致谢!

4

2 回答 2

20

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

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

于 2010-03-25T22:53:28.997 回答
2

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

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

  • 假设:从分支 B 合并到头部。
  • 确定要避免的重新提交 (R0)
  • 在 R0 (R1) 之前识别提交的 revid

    git merge <R1>
    git merge -s ours R0
    git merge B
    
于 2010-12-20T15:55:49.320 回答