我朋友的本地master
分店顯然是一場災難(通過意外的merge
s和commit
s,我想)。然而,他的開發分支是好的,但包含他還沒準備好推向遠程的變化。如何從遠程存儲庫獲取分支的新副本?
重寫他的本地master
分支與遠程master
分支並得到一個新的副本(不覆蓋他的其他分支)的最佳方式是什麼?
我朋友的本地master
分店顯然是一場災難(通過意外的merge
s和commit
s,我想)。然而,他的開發分支是好的,但包含他還沒準備好推向遠程的變化。如何從遠程存儲庫獲取分支的新副本?
重寫他的本地master
分支與遠程master
分支並得到一個新的副本(不覆蓋他的其他分支)的最佳方式是什麼?
由於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就會破壞並重新創建(即你可以不那麼容易撤消此如果需要的話),這是不太清楚這裏發生了什麼。另外,你需要有另一個分支存在,你可以在刪除和重新創建時切換(但在原始問題中就是這種情況)。
聖保羅Ebermann的答案是正確的:
git checkout master
git reset --hard origin/master
並補充說,如果你也想刪除未跟蹤文件和忽略文件:
git clean -xfn # dry run with -n
來源有更多詳細信息:How to remove local (untracked) files from the current Git working tree?
爲什麼不只是'git reset --hard origin/master'?另外......這最後一步甚至工作?似乎不適合我。 ('git checkout -b master master/master'雖然會。) – Cascabel 2011-04-14 03:27:54
@Jefromi:你說得對,我沒有看到明顯的解決方案。最後似乎爲我工作(如果分支不存在,checkout有一些默認值,但是合適的遠程分支不會)。不過,這可能取決於版本。 – 2011-04-14 11:24:54
我嘗試了第一個解決方案,但沒有奏效。很高興將其編輯出來。 – lulalala 2014-03-10 05:24:15