我知道Git会跟踪我对应用程序所做的更改,并保留它们,直到我提交更改。
要恢复到以前的提交,我使用:
$ git reset --hard HEAD HEAD is now at 820f417 micro
然后如何将硬盘上的文件恢复到之前的提交?
我的下一步是:
git add .git commit -m "revert"
但我硬盘上的文件都没有改变…
警告:git clean -f将删除未跟踪的文件,这意味着它们将永远消失,因为它们不会存储在存储库中。在执行此操作之前,请确保您确实想要删除所有未跟踪的文件。
git clean -f
试试这个,看看git clean -f。
git reset --hard不会删除未跟踪的文件,其中git-clean将从跟踪的根目录中删除不在Git跟踪下的任何文件。
git reset --hard
git-clean
或者,您可以执行以下操作(但要注意-这也会删除所有被忽略的文件)
git clean -df
git clean -xdf
旗帜说明:
-d递归删除目录中的所有文件
-d
-f
如果Git配置变量clean.requireForce未设置为false,git Clean将拒绝删除文件或目录,除非给定-f或-i。Git将拒绝修改未跟踪的嵌套git存储库(具有. git子目录的目录),除非第二个-f
-x不要使用标准忽略规则,而是使用-e指定的规则。这可以用来启动一个干净的构建。
-x
-e
来源:手册页
首先,值得注意的是git reset --hard是一个潜在的危险命令,因为它会丢弃所有未提交的更改。为了安全起见,在使用它之前,您应该始终检查git status的输出是否干净(即为空)。
git status
最初你说以下内容:
所以我知道Git会跟踪我对应用程序所做的更改,并且会一直保存它们,直到我提交更改,但这是我挂电话的地方:
这是不正确的。Git仅在您暂存(使用git add)或创建提交时记录文件的状态。一旦您创建了具有特定状态的项目文件的提交,它们就非常安全,但在此之前Git并不真正“跟踪”文件的更改。(例如,即使您使用git add暂存文件的新版本,也会覆盖暂存区域中该文件的先前暂存版本。)
git add
在你的问题中,你继续问以下问题:
当我想恢复到以前的提交时,我使用:git重置--hard HEAD和git返回:HEAD现在是820f417 micro 然后如何将硬盘上的文件恢复到之前的提交?
当我想恢复到以前的提交时,我使用:git重置--hard HEAD和git返回:HEAD现在是820f417 micro
如果你做了git reset --hard <SOME-COMMIT>,那么Git将:
git reset --hard <SOME-COMMIT>
master
<SOME-COMMIT>
HEAD指向当前分支(或当前提交),因此git reset --hard HEAD所做的就是丢弃您拥有的任何未提交的更改。
HEAD
git reset --hard HEAD
所以,假设你想要返回的好提交是f414f31。(你可以通过git log或任何历史浏览器找到它。)然后,根据你想要做的事情,你有一些不同的选择:
f414f31
git log
git reset --hard f414f31
创建一个新的提交,它表示与f414f31完全相同的项目状态,但只是将其添加到历史记录中,所以你不会丢失任何历史记录。你可以使用这个答案中建议的步骤来做到这一点-类似于:
git reset --hard f414f31git reset --soft HEAD@{1}git commit -m "Reverting to the state of the project at f414f31"