什么是git克隆存储库的"重置"命令?

axi*_*xis 12 git version-control repository

我已经下载了一个存储库

git clone <address>
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*lly 16

这是一个很长的解释,以便您了解发生了什么:

假设遥控器被调用 origin

git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master
Run Code Online (Sandbox Code Playgroud)

这样做是:

  1. (如果git status表示没有修改过的文件,则可选)丢弃磁盘上任何已修改的文件(这就是原因reset --hard)

  2. 签出远程主分支(注意:您将处于"detatched head"状态)

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

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

现在你可能想要做一些稍微不同的事情......即不要丢掉你的变化,只要将它们放在另一个命名的分支上......毕竟你永远不知道什么时候你再次需要它们

git checkout -b my-silly-changes
git branch -D master
git checkout -b master origin/master
Run Code Online (Sandbox Code Playgroud)

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

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

单个命令:

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

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

  • 你还应该做一个`git clean -xfd`来摆脱所有未跟踪的文件(构建产品等) (10认同)
  • 前四个命令虽然正确,但却是不必要的冗长.如果你在`master`,只需`git reset --hard origin/master`将与四个命令相同.仍然,+1提到创建本地分支的选项. (2认同)