我搞砸了我的git repo。我在一个单独的分支中处理了一个功能。完成工作后,我切换到主人将其合并,但我的伙伴推了几个与我发生冲突的文件。合并之后,冲突和推动新的变化,我看到我也承诺了我的伙伴的旧变化。
现在我想重做这个提交/合并。我试过了
git reset --soft HEAD^
但是当我想推送时,我收到了此错误消息Merge the remote changes before pushing again
。
任何人都可以帮助我吗?
答案 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^