我已经下载了一个代码库
git clone <address>
我已经进行了一些修改并编辑了一些文件,现在我想放弃所有更改,只确保磁盘上的内容不是代码库的原始远程版本之外的任何内容:什么是正确的命令?
我已经下载了一个代码库
git clone <address>
我已经进行了一些修改并编辑了一些文件,现在我想放弃所有更改,只确保磁盘上的内容不是代码库的原始远程版本之外的任何内容:什么是正确的命令?
这里是长篇解释,以便您理解正在发生的事情:
假设远程名称为origin
git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master
这段代码的作用是:
(如果git status没有修改过的文件,则此步骤可选) 丢弃磁盘上所有已修改的文件 (这就是为什么要用reset --hard
)
检出远程主分支 (注意: 您将处于“脱离头”状态)
删除本地的master
分支 (抛弃您所有的本地更改)
将当前的HEAD命名为新的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
最近获取的状态。这与答案开头的四个命令具有完全相同的效果,但不会看到幕后的操作。
如果您确定要丢弃所有文件并且失去所有修改 (!),您可以执行以下操作:
git reset --hard origin/master
这将重置您本地的“主”分支和工作副本的状态,使其返回到您从上游(原始远程)获取的最后一个版本。
注意:
git clone
的默认设置)master
分支如果您正在使用除“master”之外的其他分支,请调整命令:
git reset --hard origin/branch1
git reset --hard
就足够了。
这里是一个很好的资源,解释了git reset及其不同模式(--hard、--mixed和--soft)的工作原理。git reset --hard
是一项不安全的操作。它会从工作树中删除任何未提交的更改,并且无法撤消。
git clean -xfd
命令来删除所有未被跟踪的文件(编译生成物等)。 - Martin Bauligmaster
分支上,只需执行git reset --hard origin/master
命令即可完成与前四个命令相同的操作。不过,提到创建本地分支的选项还是值得一赞的。 - sleskeautoreconf
从configure.ac
生成的configure
脚本。Git总是把简单的任务变得困难甚至不可能完成。 - jww