分歧的分支 - 恢复变化

时间:2012-05-10 12:58:23

标签: git merge conflict

一个新的开发人员在一个大型git存储库上发疯了,真的搞砸了并推了推。 他的所有变化都可以被抛弃。

我的问题:我们的git hoster不允许push -force,所以我必须先拉。

如果我这样做,我有很多合并和冲突,没有必要解决它们。 恢复其他人所做的所有更改的最佳方法是什么,以便我可以推送当前版本?

3 个答案:

答案 0 :(得分:2)

我找到了一种方法来做我需要的事情。

我在这里为同样情况的其他人发布我的解决方案。 最有可能是一种更容易的方式,所以如果你知道的话,请不要犹豫。


首先,提交所有更改,以便有一个干净的工作目录。检查git状态,确认没有任何更改。

然后,创建一个新的临时分支来存储您的更改。

git branch tmp

现在你应该找到你和远程分支的最后一次提交。 您将需要提交哈希,例如63da978a9a4620790b75dfbae86d658a65dc3e25。

找到后,将主分支重置为该提交。

git reset --hard COMMIT

现在从遥控器中拉出更改。不应发生冲突。

git pull origin master

现在你可以恢复应该丢弃的提交。

git revert COMMIT1

如果你已经做好了一切,那么完成这个过程只有最后一步:将你的tmp分支与所有变化合并。

git merge tmp

同样,不应该发生任何冲突。

您现在拥有一个可以再次推送的最新分支。乌拉!

git push origin master

答案 1 :(得分:1)

你可以尝试一下。

git push origin :master

这有效地删除了名为master的分支。好的是,你不需要任何许可就可以做到(是的,我知道,很奇怪)。

完成后,你就可以了

git push origin master:master

这将重新创建主分支,就像在存储库中一样。

无需处理任何冲突/合并。 这不应该被使用(除非在你的情况下,这是一个简单的方法)。

这个技巧只允许删除这个开发人员提交的所有提交(根本不会有任何跟踪)。


有“正常”的方法:

  • 获取分支
  • 还原分支顶部的错误提交
  • 推送还原
  • 重新启动您在分支机构的工作

答案 2 :(得分:0)

为避免冲突,请不要合并(git pull),只需使用git fetch

无论如何,如果你不能使用push -force,唯一的选择就是git revert