撤消git squash merge并再次git merge

时间:2016-04-27 10:00:46

标签: git merge gerrit

我有2个远程分支功能和主人。在master的功能分支上进行了压缩合并。后来的提交在master和feature分支中都发生了。 现在我尝试从master到feature进行另一次定期合并。事实证明这是有问题的,因为新的合并并不完全符合已经发生的壁球合并。一点点搜索显示壁球合并是问题所在。

所以现在我正在努力做到以下几点 -

  1. 恢复功能分支上的所有提交,直到压缩合并为止(我从团队中得到了一个OK,以便还原更改,因为没有很多。我可以稍后再做)。 为了还原,我用了
  2. $ git revert --no-commit sha1

    $ git revert --no-commit sha2

    ...

    $ git commit -m"恢复分支直到壁球提交"

    $ git push origin HEAD:refs / for / branch / feature

    现在,当我执行git log时,我的功能分支显示了revert的额外提交。

    1. 现在我想尝试以下方法将主服务器合并到还原功能 -

      $ git merge --no-ff origin / master -m" master with master"

      我的远程仓库已启用Gerrit审核

    2. 我的问题是 -

      1. 这会包含从主人到功能的所有最新更改,包括旧壁球合并的主要更改吗?

      2. 此合并是否会产生单一的gerrit审核?

      3. 如果我的方法不起作用,任何简单的解决方案?

      4. 欢迎任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

您的问题的答案:

  1. 我不知道,但是,但是我敢打赌你一分钱一分钱(如果你愿意的话还是一分钱到一美元)你将会遇到git revert < / p>

  2. 不知道,但我对此表示怀疑 - 见下文

  3. 是的(因此,我希望这不是一个完全没用的答案)。

  4. 不要git revertgit revert放入另一个提交,它与命名提交相反,使你的混乱变得更大。 git revert是一个可怕的工具,用于撤消最近的合并错误。这是一个更好的撤消历史单一提交的工具。你真正想要做的就是假装从未发生过合并错误。

    相反:

    • git reset --hard [commitBeforeYouMadeTheMess]
    • git merge ...(或之前你做过的任何事情)

    为安全起见,您可以在git branch backup-my-mess之前的地段之前,或在另一个分支git checkout -b see-if-I-can-clean-up-my-mess中进行此操作。

    请注意,如果你已经推了你的烂摊子(亲爱的),你可能需要用力推动来解决它。

    如果你想避免这种情况,也许可以使用不同的功能分支(foobar-2或其他),并在有问题的提交之前进行分支,然后假装前一个功能分支从未存在过。

    这并没有专门针对遗传点(因为我不是一个精灵人),但你需要先把git放在右边。

答案 1 :(得分:0)

是否可以通过Gerrit恢复提交。您可以在提交的补丁集页面找到该按钮。它非常简单方便。我建议不要将master合并到feature分支而不是rebase it。