一个新的开发人员在一个大型git存储库上发疯了,真的搞砸了并推了推。 他的所有变化都可以被抛弃。
我的问题:我们的git hoster不允许push -force,所以我必须先拉。
如果我这样做,我有很多合并和冲突,没有必要解决它们。 恢复其他人所做的所有更改的最佳方法是什么,以便我可以推送当前版本?
答案 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