10

我有一个带有两个分支的仓库——master 和 dev。我在 master 分支上工作并拉取,并收到一条消息说 repo 是最新的。我提交了我的更改,并推送到远程仓库(在 github 上)。我收到一条消息,说某些更改被拒绝。

然后我做了一个git pull origin dev,这显然是错误的事情——因为它将 dev 分支与我的 master 合并,并且像个白痴一样,直到我再次推送时我才注意到这一点。所以最后一次提交显示Merge branch 'dev' of github.com:myuser/myrepo.

我可以通过执行 a 来回到本地存储库中最后一个已知的良好状态git reset --hard [sha],其中 [sha] 是合并前的提交(尽管我不确定如何对原点进行更改)——或者从什么我读过我也可以做一个git revert -m然后提交/推送该更改。

任何人都可以引导我通过“正确的方式”撤消我的合并,并将两个分支恢复到合并之前的位置吗?

谢谢——如果重要的话,这是一个只有两个开发人员的共享存储库,所以它没有进行重大更改。

编辑添加:请像我小时候一样跟我说话。我不得不承认这个 Git 东西仍然让我感到困惑,所以我离超级用户还很远!谢谢

4

2 回答 2

20

git reset --hard [sha]将更正本地存储库上的分支。要强制此推送起作用,您可以执行git push origin +master:master. + 号将强制非线性推动工作。

如果其他开发人员已经将您拉错了提交,他们将必须执行 a git remote update,然后 a git reset --hard origin/master( 前提是他们在他们的 master 分支上,并且没有进行任何其他提交。

请谨慎使用这些命令:-)。祝你好运。

于 2011-03-15T18:51:25.163 回答
2

FelipeFG 的答案在两个开发人员的环境中运行良好,您可以轻松协调重做其他人的本地存储库,但实际上您最好使用git revert -m<parent id of mainline branch, 1 in this case> <commit ref>. 然后,当您完成修复它时,只需git revert <revert commit>, 和git merge dev(在这种情况下恢复您的恢复很重要,因为否则git merge dev不会将您的旧合并视为祖先,这将导致必须解决的冲突)。

历史会很丑陋,但它也将支持快进,并且由于您的历史修订,您不必担心一些可怜的 sap 会解决一团糟的局部冲突。

有关详细信息,请参阅http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt

于 2012-08-24T23:22:06.110 回答