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

Bri*_*ian 64 git

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

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

Paŭ*_*ann 99

正如Jefromi评论的那样,

git checkout master
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

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


老劣的答案:

git checkout dev
git branch -D master
git checkout master
Run Code Online (Sandbox Code Playgroud)

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

git checkout -b master remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不只是`git reset --hard origin/master`?还......最后一步甚至工作了吗?似乎不适合我.(`git checkout -b master origin/master`虽然如此.) (6认同)

Tra*_*s D 5

Pa?lo Ebermann的答案是正确的:

git checkout master
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

并添加,如果您还希望删除未跟踪的文件和忽略的文件:

git clean -xfn # dry run with -n
Run Code Online (Sandbox Code Playgroud)

带有更多详细信息的来源:如何从当前Git工作树中删除本地(未跟踪)文件?