我朋友的本地master
分支显然是一场灾难(我想是偶然的merge
和commit
。然而,他的开发分支很好,但包含他不准备推向远程的变化。
使用远程master
分支覆盖其本地master
分支并获取新副本(不覆盖其他分支)的最佳方法是什么?
答案 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?