2010-03-01 225 views
77

我有一个跟踪远程分支的本地主题分支。为了讨论的方便,说犯历史是这样的:Git:放弃分支本地分支上的所有更改

A--B--C--O1--O2--O3 (origin/phobos) 
     \ 
     L1--L2--L3 (phobos) 

说完看着相对犯下的历史,我现在要放弃所有更改到本地phobos分支,让它重新成为一个直接的origin/phobos副本,让当地的历史是这样的:

A--B--C--O1--O2--O3 (phobos origin/phobos) 

我真的不希望当地的更改phobos分支,我真的不希望有任何合并于出身库露面之后。 (所以,只是合并不是我想到的。)

这似乎应该很容易,但我的谷歌福已经失败了我。我该怎么做呢?

回答

60

删除分支,然后重新创建它:

$ git branch -D phobos 
$ git checkout --track -b phobos origin/phobos 
+0

太棒了。这工作完美。 – 2010-03-25 19:26:57

+25

这种方法与重新设置分支的头相关的一个问题是,删除分支会吹走分支的reflog。另一方面,重置分支不仅保留了reflog,而且实际上将重置记录在reflog中。如果需要,这可以使操作在以后轻松恢复。 – 2011-03-30 22:36:19

+5

@Electrons_Ahoy建议您将接受的答案更改为Dan的答案(这样像Google这样的人如何做到这一点可能会选择更安全的方法)。 – 2014-01-20 11:11:06

219
git checkout phobos 
git reset --hard origin/phobos 

这告诉GIT中的phobos头复位到相同的承诺作为origin/phobos,并更新工作树相匹配。

+24

IMO应该是被接受的答案;它会发出“重置”命令来移植分支指针,而不是通过移除/重新创建手术。 – vdboor 2010-05-03 15:56:01

+0

实际上,我先试了这个,然后抛出了大量由本地拷贝造成的错误几乎无法使用。删除/重新创建可能不够优雅,但我不必提出任何后续问题。 – 2010-08-05 22:03:27

+3

@Electrons_Ahoy:嗯,这绝对不正常。如果您的回购协议处于良好工作状态,则通常应该进行无故障操作。 – 2010-08-06 01:44:08