【发布时间】:2012-09-22 01:35:26
【问题描述】:
我已经用
下载了一个仓库git clone <address>
我做了一些修改并编辑了一些文件,现在我想丢弃所有内容,并确保我在磁盘上拥有的只是代码库的原始远程版本:什么是正确的命令?
【问题讨论】:
标签: git version-control repository
我已经用
下载了一个仓库git clone <address>
我做了一些修改并编辑了一些文件,现在我想丢弃所有内容,并确保我在磁盘上拥有的只是代码库的原始远程版本:什么是正确的命令?
【问题讨论】:
标签: git version-control repository
这里有很长的解释,以便您了解发生了什么:
假设远程调用origin
git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master
这是做什么的:
(如果 git status 显示没有修改的文件,则可选)丢弃磁盘上的 任何 个修改过的文件(这就是 reset --hard 的原因)
签出远程主分支(注意:您将处于“分离头”状态)
删除本地 master 分支(丢弃所有本地更改)
将当前头部称为新的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。这与此答案开头的四个命令具有完全相同的效果,但没有looking behind the curtain
【讨论】:
git clean -xfd 删除所有未跟踪的文件(构建产品等)
master,只需git reset --hard origin/master 将执行与四个命令相同的操作。不过,+1 提到了创建本地分支的选项。
configure.ac 和autoreconf 生成的configure 脚本。把它留给 Git 来完成一个简单的任务,让它变得难以完成。
如果您确定要丢弃所有文件并丢失所有修改 (!),您可以这样做:
git reset --hard origin/master
这会将“master”分支的本地副本和工作副本的状态重置为您从上游(原始远程)获取的最新版本。
注意:这里假设
git clone 的默认值)master 分支的克隆中工作如果你在“master”以外的分支工作,调整命令:
git reset --hard origin/branch1
【讨论】:
如果你还没有提交任何东西,那么git reset --hard 就足够了。
Here 是一个很好的资源,用于解释 git reset 及其不同模式(--hard、--mixed 和--soft)如何工作。
免责声明:
git reset --hard 是不安全的操作。它会从工作树中删除任何未提交的更改,并且无法撤消。
【讨论】:
configure.ac 和autoreconf 生成的configure 脚本。把它留给 Git 来完成一个简单的任务,让它变得难以完成。