git丢弃所有更改并从上游拉出

时间:2012-12-08 20:06:09

标签: git

如何获取上游回购并使其替换为master?我的仓库里只有一个分支,这是主人,我完全搞砸了,所以我基本上需要从上游开始。我认为init会做这个工作,但有更简单的方法吗?

5 个答案:

答案 0 :(得分:189)

你可以在这里做(至少)两件事 - 你可以重新登记远程仓库,或者你可以reset --hard到共同的祖先,然后做一个拉动,这将快进到最新的提交在远程主机上。

具体而言,这是Nevik Rehnel原始答案的简单扩展:

git reset --hard origin/master
git pull origin master

注意:使用git reset --hard会丢弃所有未提交的更改,如果您是git的新用户,可能很容易将自己与此命令混淆,因此请确保您有意义在继续之前它将要做什么。

答案 1 :(得分:21)

在分支主机上: git reset --hard origin/master

然后用git gc做一些清理(在手册页中更多关于这一点)

更新:您可能还需要git fetch origin(或git fetch origin master,如果您想要该分支);如果在重置之前或之后执行此操作,则无关紧要。 (谢谢@ eric-walker)

答案 2 :(得分:13)

您可以在一个命令中执行此操作:

git fetch --all && git reset --hard origin/master

或者在一对命令中:

git fetch --all
git reset --hard origin/master

请注意,会丢失所有本地更改

答案 3 :(得分:4)

git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f
瞧,现在你的叉子又回到了上游。

答案 4 :(得分:2)

我现在终于意识到,代替git fetch --all && git reset --hard origin/master,应该改为git fetch --all && git reset --hard origin/<branch_name>(如果一个人在另一个分支上工作)