2011-04-11 182 views
14

我搞砸了我的git回购一点。我在一个单独的分支中开发了一个功能。完成工作后,我转向主人合并,但我的合作伙伴推送了一些与我发生冲突的文件。合并后,冲突和推动新的变化,我看到我也犯了我的伴侣的旧变化。撤销上次提交/合并

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

任何人都可以帮助我吗?

+0

http://stackoverflow.com/questions/1377845/git-reset-hard-and-a-remote-repository – plaes 2011-04-11 16:04:34

回答

5

呵呵,你几乎想通了:

git reset --hard HEAD^ 
+1

嘿plaes感谢您的回答,但我想保持我推错的文件。有没有解决方案? – 2011-04-11 15:08:31

+0

'git reset --soft'可以帮到你。 – LaraChicharo 2015-10-13 19:51:40

27

您的特性分支仍将指向你的工作。你不会失去这些改变。

正如plaes说,你可以重置主回一个与

git reset --hard HEAD^ 

如果你想抓住从你的分支一些特定的文件,而合并,就可以检查出来:

git checkout yourbranch -- file1 file2 etc 

如果你想从合并之前的主人的一些文件,你也可以检查这些:

git checkout master^ -- file3 file4 etc 

这并不理想,但它有时是需要的。合并/可能意味着您拒绝合并中的任何一方的一些更改。以获得适当的合并,最好的办法是:

git merge --no-commit yourbranch 

从主,然后运行从上面的混帐结账的命令,最后提交:

git add . -A 
git commit 

现在,当您按下这个分支,你需要添加force选项

git push --force 

git push -f 

希望这有助于。

+0

感谢您的回复adymitruk,我尝试了git'reset --hard HEAD ^',之后git push origin + master,但是我仍然收到错误讯息'![远程拒绝]主机 - >主机(预接收钩子拒绝)' – 2011-04-11 21:07:54

+0

如果您因为推送而失去远程提交,您需要告诉git可以使用'--force'或' -f'选项。更新答案。 – 2012-06-29 18:17:39

7

这里的问题是,你要撤消你已经推到中央存储库的变化。如果你还没有把它们推到第一位,那么一个git reset --hard/- soft/- HEAD ^就可以完成。

所以,当你已经reseted当您尝试推到原点和更新远程裁判是不是一个祖先,以你的头你的头git的抱怨。使用--force:

git push --force origin master