撤消上次提交/合并

Sig*_*sen 26 git version-control commit revert

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

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

谁能帮我?

Ada*_*ruk 38

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

正如plaes所说,你可以重置一个主人

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

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

git checkout yourbranch -- file1 file2 etc
Run Code Online (Sandbox Code Playgroud)

如果你想在合并之前从master获得一些文件,你也可以检查这些:

git checkout master^ -- file3 file4 etc
Run Code Online (Sandbox Code Playgroud)

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

git merge --no-commit yourbranch
Run Code Online (Sandbox Code Playgroud)

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

git add . -A
git commit
Run Code Online (Sandbox Code Playgroud)

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

git push --force
Run Code Online (Sandbox Code Playgroud)

要么

git push -f
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


pla*_*aes 10

呵呵,你几乎想通了:

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)


ral*_*nja 10

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

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

git push --force origin master
Run Code Online (Sandbox Code Playgroud)