2010-03-01 223 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