2011-04-14 121 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