我朋友的本地master分支显然是一场灾难(我猜是偶然的merges和commits)。但是,他的开发分支很好,但是包含一些他不准备推送到远程的更改。
master用远程master分支覆盖本地分支并获得新副本(不覆盖其他分支)的最佳方法是什么?
Answers:
正如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会被破坏并重新创建(即,如果需要,您无法轻易撤消此操作),并且不清楚发生了什么。另外,您还需要存在另一个分支,可以在删除和重新创建过程中切换到该分支(但原来的问题就是这种情况)。
checkout dev一个
PaŭloEbermann的答案是正确的:
git checkout master
git reset --hard origin/master
并添加,如果您还希望删除未跟踪的文件和忽略的文件:
git clean -xfn # dry run with -n
带有更多详细信息的来源:如何从当前Git工作树中删除本地(未跟踪)文件?
git reset --hard origin/master呢?还有...最后一步甚至行得通吗?似乎不适合我。(git checkout -b master origin/master会虽然)