16

我已经下载了一个存储库

git clone <address>

我进行了一些修改并编辑了一些文件,现在我想丢弃所有内容并确保我在磁盘上拥有的只是代码库的原始远程版本:什么是正确的命令?

4

3 回答 3

26

这是长篇解释,以便您了解发生了什么:

假设远程被调用origin

git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master

这是做什么的:

  1. (如果 git status 说没有修改过的文件,则可选)丢弃磁盘上的任何reset --hard修改过的文件(这就是为什么)

  2. 签出远程主分支(注意:您将处于“分离头”状态)

  3. 删除本地master分支(丢弃所有本地更改)

  4. 将当前头部称为新master分支

现在您可能想做一些稍微不同的事情...即不要丢弃您的更改,只需将它们放在另一个命名的分支上...毕竟您永远不知道何时再次需要它们

git checkout -b my-silly-changes
git branch -D master
git checkout -b master origin/master

这会将您当前的更改保存在一个新的本地分支my-silly-changes中,然后删除旧的本地分支master,最后从远程头重新创建它。

以下是对那些认为自己知道自己在做什么的人的解释:

单个命令:

git reset --hard origin/master

将丢弃任何本地更改并将当前分支重新指向最近获取的origin/master. 这与此答案开头的四个命令具有完全相同的效果,但无需看幕后

于 2012-10-01T07:56:19.423 回答
1

如果您确定要丢弃所有文件并丢失所有修改(!),您可以执行以下操作:

git reset --hard origin/master

这会将“master”分支的本地副本和工作副本的状态重置为您从上游(原始远程)获取的最后一个版本。

注意:这假设

  • 您的上游存储库称为“origin”(默认为git clone
  • 您正在远程master分支的克隆中工作

如果您在 "master" 以外的分支中工作,请调整命令:

git reset --hard origin/branch1
于 2012-10-01T07:52:24.240 回答
0

如果你还没有提交任何东西,那就git reset --hard足够了。

是一个很好的资源,解释了 git reset 的不同模式如何工作(--hard、--mixed 和--soft)。

免责声明

git reset --hard是不安全的操作。它从工作树中删除任何未提交的更改,并且无法撤消。

于 2012-10-01T07:52:12.830 回答