我运行了git状态,它告诉我一切都是最新的,没有本地更改。

然后我做了几次连续的改变,意识到我想扔掉一切,回到原来的状态。这个命令能帮我吗?

git reset --hard HEAD

当前回答

我遇到了类似的问题。解决方案是使用gitlog来查找本地提交的版本与远程提交的版本不同。(例如,版本为3c74a11530697214cbcc4b7b98bf7a65952a34ec)。

然后使用git reset-hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec还原更改。

其他回答

如果您只想删除所有更改,请执行git签出。这是一种更快更简单的方法。

我遇到了类似的问题。解决方案是使用gitlog来查找本地提交的版本与远程提交的版本不同。(例如,版本为3c74a11530697214cbcc4b7b98bf7a65952a34ec)。

然后使用git reset-hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec还原更改。

如果您想恢复所有更改并更新当前远程主机(例如,您发现主机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.

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

git checkout .

或者等效地,对于git版本>=2.23:

git restore .

要还原对索引所做的更改(即您添加的更改),请执行此操作。警告:这将重置所有未推送的提交到master!:

git reset

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

git revert <commit 1> <commit 2>

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

git clean -f

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

git clean -fd

查看git-relog。它将列出它记住的所有状态(默认为30天),您只需签出您想要的状态即可。例如:

$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d