协慌网

登录 贡献 社区

如何将 Git 托管项目中的所有本地更改还原到以前的状态?

我有一个项目,我在其中运行git init 。几次提交之后,我做了git status ,告诉我一切都是最新的,并且没有本地更改。

然后我做了几个连续的更改,并意识到我想把所有东西扔掉,然后回到原来的状态。这个命令会为我做吗?

git reset --hard HEAD

答案

如果要还原对工作副本所做的更改,请执行以下操作:

git checkout .

如果要还原对索引所做的更改(即已添加的更改),请执行此操作。 警告这会重置你掌握的所有未提交的提交!

git reset

如果要还原已提交的更改,请执行以下操作:

git revert <commit 1> <commit 2>

如果要删除未跟踪的文件(例如,新文件,生成的文件):

git clean -f

或未跟踪的目录(例如,新的或自动生成的目录):

git clean -fd

注意:您可能还想运行

git clean -fd

git reset --hard

不会删除未跟踪的文件,因为 git-clean 将从被跟踪的根目录中删除不在 git 跟踪下的任何文件。警告 - 小心这个!首先使用 git-clean 进行干运行是有帮助的,看看它会删除什么。

当您收到错误消息时,这也特别有用

~"performing this command will cause an un-tracked file to be overwritten"

当你和你的朋友都添加了一个同名的新文件时,可能会发生这种情况,一个是正在更新工作副本,但他首先将它提交到源代码控制中,而你不关心删除未经跟踪的副本。

在这种情况下,执行干运行还将帮助显示将被覆盖的文件列表。

如果您想恢复所有更改并且与当前远程主控器保持同步(例如,您发现主 HEAD 已向前移动,因为您将其分支并且您的推送被 '拒绝')您可以使用

git fetch  # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.