2011-05-10 80 views
33

我只是对我的一个功能分支(“feedback_tab”)进行了一些更改,然后签出“主”并将它们合并到那里。我实际上是想将它们合并到我的“开发”分支中。撤消一个混帐合并(尚未推送)

现在,主人在17次提交之前领先于'origin/master'(远程) - 我没有推动合并(显然不想)。我怎样才能将主人恢复到意外合并之前的相同状态?我对git revertgit reset这个东西感到困惑。

我查看了我的git日志,并没有将feedback_tab合并到master中的条目。我原以为这将是最高的条目?

有点困惑:/任何帮助欢迎!最大

+0

@自己:哦,亲爱的,哦,亲爱的,应该阅读常见问题:“程序员常用的软件工具”。 – orlp 2011-05-10 14:07:27

回答

33

git reset --hard HEAD~17带你回来17提交主人的头。 git rebase -i HEAD~17可能会摆脱额外的提交以及。

+0

谢谢Tamas。第一个选项似乎工作正常。 – 2011-05-10 14:21:34

+22

你可能想使用'reset --merge'。如果合并是唯一发生的事情,但是如果你进行了本地修改(不受合并影响的文件),它会将它们留在原地,而不是像'--hard'那样销毁它们。 – Cascabel 2011-05-10 20:19:22

+13

也可以做'git reset --hard origin/master' – Karl 2011-05-12 00:16:37

12

git reset

Undo a merge or pull 

    $ git pull       <1> 
    Auto-merging nitfol 
    CONFLICT (content): Merge conflict in nitfol 
    Automatic merge failed; fix conflicts and then commit the result. 
    $ git reset --hard     <2> 
    $ git pull . topic/branch   <3> 
    Updating from 41223... to 13134... 
    Fast-forward 
    $ git reset --hard ORIG_HEAD  <4> 
45

采取撤消不是推的合并:

git reset --merge ORIG_HEAD 

如果在合并过程中,你会遇到冲突,撤消合并最好的办法是:

git merge --abort 
+0

谢谢,这是非常明确的问题点,它也可以。=) – 2015-04-08 15:07:09

+0

这对我有帮助!谢谢 – 2016-10-14 06:58:06

3

这一个肯定会工作!

git reset --hard HEAD~1 
git init 

第一个将还原你最近所做的更改(合并) 第二个会初始化回购,以最新的(因此将快进到最新的原点)

我试过

git reset --merge 

但它没有办法。