如何从远程存储库获取分支的新副本?

我的朋友的本地master分支显然是一个灾难(我想通过意外mergecommit )。 然而,他的开发分支是好的,但包含变化,他不准备推远程。

用远程master分支覆盖他的本地master分支并得到一个新副本(而不是压倒他的其他分支)的最好方法是什么?

Jeutti评论说,

 git checkout master git reset --hard origin/master 

做正确的事情:设置主人的原始状态。 (如果您已经在master分支上,则可以省略第一个命令。)也会使分支的引用日志保持原样。


老鄙人回答:

 git checkout dev git branch -D master git checkout master 

这将切换到另一个分支(在这种情况下“dev” – select任何其他分支),删除本地master分支,然后从remotes/origin/master重新创build(根据您的设置和Git版本)。 最后的命令通常相当于

 git checkout -b master remotes/origin/master 

与上面的新答案相比,这有一个缺点,即reflog被破坏并重新创build(即,如果需要,你不能像这样简单地撤销这个),并且不太清楚这里发生了什么。 此外,您还需要在删除和重新创build过程中可以切换到另一个分支(但在原始问题中就是如此)。

PaŭloEbermann的回答是正确的:

 git checkout master git reset --hard origin/master 

并补充说,如果你也想删除未跟踪的文件和忽略的文件:

 git clean -xfn # dry run with -n 

来源与进一步的细节: 如何从当前的Git工作树中删除本地(未跟踪)的文件?