【问题标题】:how do I undo another developers git push to the master branch我如何撤消其他开发人员 git push 到 master 分支
【发布时间】:2016-10-03 16:21:09
【问题描述】:

这似乎总是会发生,但我找不到答案。

发生了什么:

另一位开发人员在其本地服务器上 git merged 与 master 分支建立了一个分支,导致 冲突。然后 git added 冲突,git committed,并 git pushed 更改和冲突到 master 分支。丢下他的麦克风离开了大楼:

问题:

有没有办法让我撤消最后一次冲突的提交,这样我就可以将我的代码更改推送到 master 并继续我的一天,让其他开发人员在他的本地计算机上修复冲突的代码???


到目前为止我发现了什么:

我已经提交了我的本地更改并将“冲突提交”拉到我的本地服务器...

我发现的两个选项是:

选项 1:

git revert -m 1 <conflicted commit>

这将撤消冲突提交所做的所有更改。但是当其他开发人员执行 git pull 时,他们的所有更改都将被删除。对吧?

选项 2:

git reset --hard <my commit>;
git push --force;

这将完全从 git 中删除冲突的提交,就好像它从未发生过一样(我不喜欢)。但是现在其他开发者本地服务器会不同步。

你会怎么做?

【问题讨论】:

  • 这些冲突是否在积极造成痛苦?也就是说,它们是否会导致测试失败或行为回归? Git 会告诉你合并时是否有冲突,但只要解决得好,一般不会有问题。
  • 我会做选项 2。但是冲突的提交不会被完全删除。它在其他开发人员中,origin/master,(直到 pull/fetch)和 reflogs(你的,他的,服务器)。
  • 您对第一个选项是正确的。如果您确实还原,其他开发人员更改将被删除。选项2是要走的路。在他的机器上,他的本地人将领先于他从服务器提交的内容。如果他再次拉取,更改将再次合并,从而导致他需要再次解决之前的冲突。
  • @makoto 网站已失效。
  • @Vishwanath 谢谢我已经选择了选项 2。我第一次这样做。希望其他开发人员不需要太多帮助即可重回正轨。

标签: git push git-merge git-commit


【解决方案1】:

如果您只想撤消一个提交,最安全的修复方法是您的第一个选项:

git revert -m 1 &lt;conflicted commit&gt;

一般来说,在远程存储库上的任何提交上使用git reset 是很危险的。如果有人在推送这些更改后克隆了存储库并进行了自己的更改,那么他们在尝试与git pull 同步时会遇到麻烦。有一个带有“悬空头”的“孤立提交”。虽然这两件事都可以随着时间的推移而解决,但如果可以通过简单的git revert 来解决,就没有理由陷入此类麻烦。

【讨论】:

    【解决方案2】:

    这里最简单的解决方案可能是最好的——尤其是在没有进行其他更改的情况下。只需在他的推送之前为提交做一个git checkout 并重新提交这些文件,仍然会让其他开发人员了解所做的历史,同时解决您在冲突状态下遇到的问题。然而,这种方法的一个缺点是它确实会在您的存储库中留下冲突/非编译代码。

    【讨论】:

    • @tcmarch 谢谢,在这种情况下 git checkout 和 git revert 有什么不同?除了不会删除新文件之外,基本一样吗?
    • checkout 而不是revert 是关于维护哪些更改。 revert 将从所选提交中删除更改,而checkout 将在所选提交处获取存储库状态。就您而言,事实上,在您希望 HEAD 所在的位置和错误代码之间只进行了一次更改,checkout(您熟悉)是一个非常可行的选择。不过,revert 通常可能是一个更好的选择,除非您经常删除对存储库服务器版本的最新更改。希望有帮助!
    【解决方案3】:

    我认为您需要改进工作流程。让每个人都更新服务器中的主要分支既不好也不安全。此外,git push --force 太危险了,千万不要在团队工作的任何公共分支上使用它。您可以允许任何推送到非主分支。代码审查团队审查更改并将提交合并到主分支git mergegit cherry-pickgit rebasegit applygit am 等。一旦提交到主分支,只使用git revert 撤消它。如有必要,开发人员可以使用git pull --rebase 将本地更改与最新的主分支同步。他们也可以git fetch主分支并组织他们自己的提交。

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 2014-11-03
      • 1970-01-01
      • 2012-10-31
      • 2010-11-19
      • 2012-02-29
      • 1970-01-01
      • 2019-11-18
      • 2016-10-03
      相关资源
      最近更新 更多