猿问

如何使用'git reset --hard HEAD'恢复到先前的提交?

我知道Git会跟踪我对应用程序所做的更改,它会一直保留到它们,直到我提交更改为止,但这是我挂断的地方:


当我想恢复到以前的提交时,我使用:


git reset --hard HEAD

Git返回:


HEAD is now at 820f417 micro

然后,如何将硬盘驱动器上的文件还原到先前的提交?


我的下一步是:


git add .

git commit -m "revert"

但是我的硬盘上没有任何文件已更改...


我在做什么对/错?


慕虎7371278
浏览 4970回答 2
2回答

函数式编程

首先,始终要注意这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 f414f31git reset --soft HEAD@{1}git commit -m "Reverting to the state of the project at f414f31"

白板的微信

警告:git clean -f将删除未跟踪的文件,这意味着它们永久消失了,因为它们没有存储在存储库中。在执行此操作之前,请确保您确实要删除所有未跟踪的文件。试试看,看看git clean -f。git reset --hard不会删除未跟踪的文件,而git-clean将从根目录中删除所有不在Git跟踪下的文件。或者,就像@Paul Betts所说的,您可以执行此操作(请注意-也会删除所有忽略的文件)git clean -dfgit clean -xdf 警告!这也会删除忽略的文件
随时随地看视频慕课网APP
我要回答