我朋友的当地master
分支显然是一场灾难(我想是偶然的merge
s和commit
s).然而,他的开发分支很好,但包含他不准备推向远程的变化.
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被破坏并重新创建(即,如果需要,你不能轻易撤消它),并且不太清楚这里发生了什么.此外,您需要在删除和重新创建期间可以切换到另一个分支(但在原始问题中就是这种情况).
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工作树中删除本地(未跟踪)文件?