2 回答
TA贡献1807条经验 获得超9个赞
首先,始终要注意这git reset --hard是一个潜在的危险命令,因为它会丢弃所有未提交的更改。为了安全起见,git status在使用前,请务必检查其输出是否干净(即为空)。
最初,您说以下内容:
因此,我知道Git会跟踪我对应用程序所做的更改,它会一直保留到它们,直到我提交更改为止,但这是我挂断的地方:
不对 Git仅在暂存文件(带有git add)或创建提交时记录文件的状态。一旦创建了一个使项目文件处于特定状态的提交,它们就非常安全,但是直到那时Git才真正对文件进行“跟踪”。(例如,即使您git add要暂存文件的新版本,也会覆盖暂存区域中该文件先前已暂存的版本。)
在您的问题中,然后继续询问以下内容:
当我想恢复到以前的提交时,我使用:git reset --hard HEAD git返回:HEAD现在位于820f417 micro
然后,如何将硬盘驱动器上的文件还原到先前的提交?
如果您这样做,git reset --hard <SOME-COMMIT>那么Git将:
使您当前的分支(通常master)回到<SOME-COMMIT>。
然后,使工作树中的文件和索引(“暂存区”)与中提交的版本相同<SOME-COMMIT>。
HEAD指向您当前的分支(或当前的提交),因此所有git reset --hard HEAD要做的就是丢弃您具有的所有未提交的更改。
因此,假设您要返回的良好提交是f414f31。(您可以通过git log或任何历史记录浏览器找到它。)然后,根据实际要执行的操作,您可以有几个不同的选择:
更改您当前的分支以指向较早的提交。您可以使用git reset --hard f414f31。但是,这是在重写分支的历史记录,因此,如果您已与任何人共享此分支,则应避免使用它。另外,您之后所做的提交f414f31将不再位于master分支的历史记录中。
创建一个新提交,该提交表示与项目完全相同的项目状态f414f31,但是只需将其添加到历史记录中,这样就不会丢失任何历史记录。您可以使用此答案中建议的步骤进行操作,例如:
git reset --hard f414f31
git reset --soft HEAD@{1}
git commit -m "Reverting to the state of the project at f414f31"
TA贡献1883条经验 获得超3个赞
警告:git clean -f将删除未跟踪的文件,这意味着它们永久消失了,因为它们没有存储在存储库中。在执行此操作之前,请确保您确实要删除所有未跟踪的文件。
试试看,看看git clean -f。
git reset --hard不会删除未跟踪的文件,而git-clean将从根目录中删除所有不在Git跟踪下的文件。
或者,就像@Paul Betts所说的,您可以执行此操作(请注意-也会删除所有忽略的文件)
git clean -df
git clean -xdf 警告!这也会删除忽略的文件
- 2 回答
- 0 关注
- 4969 浏览
添加回答
举报