我朋友的本地master
分支显然很混乱(我猜是因为不小心合并和提交了一些代码)。然而,他的开发分支都很好,但包含了他还没有准备好推送到远程仓库的更改。
覆盖他的本地master
分支,用远程master
分支获取一个新的副本(同时不覆盖他的其他分支),该怎么做最好?
我朋友的本地master
分支显然很混乱(我猜是因为不小心合并和提交了一些代码)。然而,他的开发分支都很好,但包含了他还没有准备好推送到远程仓库的更改。
覆盖他的本地master
分支,用远程master
分支获取一个新的副本(同时不覆盖他的其他分支),该怎么做最好?
正如Jefromi所评论的,
git checkout master
git reset --hard origin/master
这样做是正确的:将主分支设置为其原始状态。(如果您已经在master分支上,则可以省略第一个命令。)它还保留了分支的引用日志。
旧的不好的回答:
git checkout dev
git branch -D master
git checkout master
这将切换到另一个分支(在本例中是“dev” - 可以选择任何其他分支),删除本地的master
分支,然后从remotes/origin/master
重新创建它(根据您的设置和Git版本可能不起作用)。最后一条命令通常等同于
git checkout -b master remotes/origin/master
与上面的新答案相比,这种方法的缺点是会破坏和重新创建reflog(即如果需要撤销操作就不太容易了),并且这里发生了什么不太清楚。此外,在删除和重新创建过程中需要存在另一个分支,但在原始问题中已经存在。
Paŭlo Ebermann的回答是正确的:
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
则有效。) - Cascabelcheckout dev
那个。 - lulalalagit reset --hard origin/master
会从origin/master
拉取更改,并将您的master
分支变为origin/master
的精确副本吗? - Sudhir Singh Khanger