撤消上次提交/合并

时间:2011-04-11 14:53:13

标签: git version-control commit revert

我搞砸了我的git repo。我在一个单独的分支中处理了一个功能。完成工作后,我切换到主人将其合并,但我的伙伴推了几个与我发生冲突的文件。合并之后,冲突和推动新的变化,我看到我也承诺了我的伙伴的旧变化。

现在我想重做这个提交/合并。我试过了 git reset --soft HEAD^但是当我想推送时,我收到了此错误消息Merge the remote changes before pushing again

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:32)

您的功能分支仍将指向您的工作。你不会失去这些变化。

正如plaes所说,你可以用

重置一个主人
git reset --hard HEAD^

如果您想从分支中获取某些特定文件而不进行合并,可以查看它们:

git checkout yourbranch -- file1 file2 etc

如果您想在合并之前从master获取某些文件,您还可以检查这些文件:

git checkout master^ -- file3 file4 etc

这并不理想,但有时需要它。合并/可能/表示您拒绝合并中任何一方的某些更改。获得适当合并的最佳方法是:

git merge --no-commit yourbranch
从master获取

,然后从上面运行git checkout命令,最后提交:

git add . -A
git commit

现在推送此分支时,您需要添加force选项

git push --force

git push -f

希望这有帮助。

答案 1 :(得分:9)

此处的问题是您要撤消已经推送到中央存储库的更改。如果你没有在第一时间推动它们,那么git reset --hard / - soft / - 混合HEAD ^就可以了。

因此,当您重新尝试推送到原点并更新不是HEAD祖先的远程参考时,您的HEAD git会抱怨。使用--force:

git push --force origin master

答案 2 :(得分:8)

呵呵,你几乎想通了:

git reset --hard HEAD^