协慌网

登录 贡献 社区

git 撤消所有未提交或未保存的更改

我正在尝试撤消自上次提交以来的所有更改。在查看这篇文章后,我尝试了git reset --hardgit reset --hard HEAD 。我的响应现在是 18c3773 ... 但是当我查看本地源时,所有文件仍然存在。我想念什么?

答案

  • 这将取消转储您可能已使用git add暂存的所有文件:

    git reset
  • 这将还原所有本地未提交的更改(应在 repo root 中执行):

    git checkout .

    您还可以仅将未提交的更改还原到特定的文件或目录:

    git checkout [some_dir|file.txt]

    恢复所有未提交的更改的另一种方法(更长的类型,但可以在任何子目录中使用):

    git reset --hard HEAD
  • 这将删除所有本地未跟踪的文件,因此保留 git 跟踪的文件:

    git clean -fdx

    警告: -x还将删除所有忽略的文件,包括.gitignore指定的文件!您可能要使用-n预览要删除的文件。


综上所述:执行以下命令基本上等效于从原始来源进行git clone (但它不会重新下载任何内容,因此速度更快):

git reset
git checkout .
git clean -fdx

典型的用法是在构建脚本中,这时您必须确保树是绝对干净的 - 没有任何修改或本地创建的目标文件或构建伪像,并且您希望使其运行得非常快并且不重新构建。每次都克隆整个存储库。

如果您想 “ 撤消 ” 所有未提交的更改,只需运行:

git stash
git stash drop

如果您有任何未跟踪的文件(通过运行git status检查),可以通过运行以下命令将其删除:

git clean -fdx

git stash创建一个新的 stash,它将变成stash @ {0} 。如果您想先检查一下,可以运行git stash list来查看您的git stash list 。它看起来像:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

每个存储区均以先前的提交消息命名。

还有git stash可以 “隐藏” 您的本地更改,以后可以重新应用;如果不再需要,可以将其删除

有关隐藏的更多信息