如何从远程存储库获取分支的新副本?


76

我朋友的本地master分支显然是一场灾难(我猜是偶然的merges和commits)。但是,他的开发分支很好,但是包含一些他不准备推送到远程的更改。

master用远程master分支覆盖本地分支并获得新副本(不覆盖其他分支)的最佳方法是什么?

Answers:


123

正如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会被破坏并重新创建(即,如果需要,您无法轻易撤消此操作),并且不清楚发生了什么。另外,您还需要存在另一个分支,可以在删除和重新创建过程中切换到该分支(但原来的问题就是这种情况)。


6
为什么不只是git reset --hard origin/master呢?还有...最后一步甚至行得通吗?似乎不适合我。(git checkout -b master origin/master会虽然)
Cascabel

@Jefromi:没错,我没有看到明显的解决方案。最后一个似乎对我有用(如果分支不存在,那么checkout具有一些默认值,但是适合的远程分支却可以)。不过,这可能取决于版本。
圣保罗Ebermann

1
我尝试了第一个解决方案,但没有成功。修改它会很好。
lulalala 2014年

@lulalala对于“第一个”解决方案,您的意思是提到的“旧”解决方案?为了使其正常工作,您需要具有一个名为“ dev”的本地分支。
圣保罗Ebermann

是的checkout dev一个
lulalala

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.