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

Nin*_*irl 125 git

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

Eri*_*ker 216

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

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

git reset --hard origin/master
git pull origin master
Run Code Online (Sandbox Code Playgroud)

注意:使用git reset --hard将丢弃任何未提交的更改,如果您是git的新手,可能很容易将自己与此命令混淆,因此请确保在继续操作之前了解它将要执行的操作.

  • 是时候接受"接受答案点击"@NinjaCowgirl (5认同)
  • 为新手提供更多帮助:`git gc` 清理并运行一些内务处理。另一方面,我从未运行过“git gc”。跑步很好,但没有必要。 (3认同)

Nev*_*nel 22

而在分支大师: git reset --hard origin/master

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

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


Luc*_* C. 16

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

git fetch --all && git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

或者在一对命令中:

git fetch --all
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

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


res*_*way 6

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
Run Code Online (Sandbox Code Playgroud)

瞧,现在你的叉子又回到了上游。


Bit*_*eak 5

我现在终于意识到,而不是

git fetch --all && git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

它应该是

git fetch --all && git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)

相反(如果一个人在不同的分支上工作)