如何从远程代码库获取分支的最新拷贝?

100

我朋友的本地master分支显然很混乱(我猜是因为不小心合并和提交了一些代码)。然而,他的开发分支都很好,但包含了他还没有准备好推送到远程仓库的更改。

覆盖他的本地master分支,用远程master分支获取一个新的副本(同时不覆盖他的其他分支),该怎么做最好?

2个回答

162

正如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(即如果需要撤销操作就不太容易了),并且这里发生了什么不太清楚。此外,在删除和重新创建过程中需要存在另一个分支,但在原始问题中已经存在。


7
为什么不直接使用 git reset --hard origin/master 呢?还有,最后一步有效吗?对我来说似乎没有效果。(git checkout -b master origin/master 则有效。) - Cascabel
@Jefromi:你说得对,我没有看到显而易见的解决方案。最后一个似乎对我有用(如果分支不存在,则checkout具有一些默认值,但适合的远程分支存在)。不过这可能取决于版本。 - Paŭlo Ebermann
1
我尝试了第一个解决方案,但它没有起作用。最好将其编辑掉。 - lulalala
是的,checkout dev 那个。 - lulalala
git reset --hard origin/master会从origin/master拉取更改,并将您的master分支变为origin/master的精确副本吗? - Sudhir Singh Khanger
显示剩余3条评论

13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接