Git:丢弃分支分支上的所有更改


117

我有一个跟踪远程分支的本地主题分支。为了争辩,说提交历史看起来像这样:

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分支的本地更改,而且我真的不希望任何合并显示在源存储库中。(因此,合并并不是我的初衷。)

这似乎应该很容易,但是我的google-fu让我失败了。我该怎么做呢?

Answers:


79

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

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

37
与重置分支头相比,此方法的问题在于删除分支会破坏分支的引用日志。另一方面,重置分支不仅保留引用日志,而且实际上将重置记录在引用日志中。如果需要的话,这使得以后的操作很容易逆转。
Dan Moulding

9
@Electrons_Ahoy建议您在此处将已接受的答案更改为Dan的答案(这样,像我这样使用Google搜索方法的人可能会选择更安全的方法)。
史蒂夫·钱伯斯

4
@DanMoulding的答案不涉及在不必要时删除本地分支。更安全。

@brma:怎么样?它仍然只是指向新提交的分支。
mipadi 2014年

5
丹·莫丁的答案更安全。我认为您应该选择那个。
Daniel Apt

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

这告诉Git将的头部重置phobos为与相同的提交origin/phobos,并更新工作树以使其匹配。


35
海事组织,这应该是公认的答案;它发出“重置”命令来移植分支指针,而不是通过删除/重新创建来进行手术。
vdboor 2010年

实际上,我首先尝试了此方法,但由于本地复制它几乎无法使用而引发了很多错误。删除/重新创建可能不那么优雅,但是我不必再问任何后续问题。
Electrons_Ahoy

3
@Electrons_Ahoy:嗯,那绝对不正常。如果您的存储库工作正常,那么进行此重置通常应该没有问题。
Dan Moulding

甚至是有问题的 如果您“偶然地”发出了此命令而未实际阅读其功能,请使用git reflog查找回家的路。 :)
dbn

如果您在分支机构上并且在本地将其弄乱,这也可以使用。
老虎机
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.