2011-04-14 109 views
41

我朋友的本地master分店顯然是一場災難(通過意外的merge s和commit s,我想)。然而,他的開發分支是好的,但包含他還沒準備好推向遠程的變化。如何從遠程存儲庫獲取分支的新副本?

重寫他的本地master分支與遠程master分支並得到一個新的副本(不覆蓋他的其他分支)的最佳方式是什麼?

回答

58

由於Jefromi評論,

git checkout master 
git reset --hard origin/master 

做正確的事:主設置它的起源狀態。 (如果您已經在master分支上,則可以省略第一條命令。)它也會使分支的引用日誌保持不變。


老劣答案:

git checkout dev 
git branch -D master 
git checkout master 

這個切換到另一個分支(在這種情況下,「開發」 - 選擇你可能擁有的任何其他分支),刪除本地master分支,然後從remotes/origin/master重新創建它(這可能無法使用,具體取決於您的設置和Git版本)。最後的命令往往等同於

git checkout -b master remotes/origin/master 

相比於上面這個新的回答的缺點是reflog就會破壞並重新創建(即你可以不那麼容易撤消此如果需要的話),這是不太清楚這裏發生了什麼。另外,你需要有另一個分支存在,你可以在刪除和重新創建時切換(但在原始問題中就是這種情況)。

+6

爲什麼不只是'git reset --hard origin/master'?另外......這最後一步甚至工作?似乎不適合我。 ('git checkout -b master master/master'雖然會。) – Cascabel 2011-04-14 03:27:54

+0

@Jefromi:你說得對,我沒有看到明顯的解決方案。最後似乎爲我工作(如果分支不存在,checkout有一些默認值,但是合適的遠程分支不會)。不過,這可能取決於版本。 – 2011-04-14 11:24:54

+1

我嘗試了第一個解決方案,但沒有奏效。很高興將其編輯出來。 – lulalala 2014-03-10 05:24:15

相關問題