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

时间:2011-04-14 01:03:24

标签: git

我朋友的本地master分支显然是一场灾难(我想是偶然的mergecommit。然而,他的开发分支很好,但包含他不准备推向远程的变化。

使用远程master分支覆盖其本地master分支并获取新副本(不覆盖其他分支)的最佳方法是什么?

2 个答案:

答案 0 :(得分:86)

正如Jefromi评论的那样,

git checkout master
git reset --hard origin/master

做正确的事:将主设备设置为原始状态。 (如果您已经在master分支上,则可以省略第一个命令。)它还使分支的reflog保持不变。


老劣的回答:

git checkout dev
git branch -D master
git checkout master

这会切换到另一个分支(在这种情况下为“dev” - 选择您可能拥有的任何其他分支),删除本地master分支,然后从remotes/origin/master重新创建它(这可能不起作用)取决于您的设置和Git版本)。最后一个命令通常等同于

git checkout -b master remotes/origin/master

与上面的新答案相比,这有一个缺点,即reflog被破坏并重新创建(即如果需要,你不能轻易撤消它),并且不太清楚这里发生了什么。此外,您需要存在另一个分支,您可以在删除和重新创建期间切换到该分支(但在原始问题中就是这种情况)。

答案 1 :(得分:4)

PaŭloEbermann的回答是正确的:

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?