我运行了git状态,它告诉我一切都是最新的,没有本地更改。
然后我做了几次连续的改变,意识到我想扔掉一切,回到原来的状态。这个命令能帮我吗?
git reset --hard HEAD
我运行了git状态,它告诉我一切都是最新的,没有本地更改。
然后我做了几次连续的改变,意识到我想扔掉一切,回到原来的状态。这个命令能帮我吗?
git reset --hard HEAD
当前回答
其他答案似乎太复杂了,所以这里有一个简单的解决方案对我有效:
如何放弃所有本地更改并将文件重置为当前分支上的最后一次提交?
# Execute on the root of the working tree...
# Discard all changes to tracked files
git checkout .
# Remove all untracked files
git clean -fd
注意:忽略的文件将不受影响
其他回答
要还原对工作副本所做的更改,请执行以下操作:
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
其他答案似乎太复杂了,所以这里有一个简单的解决方案对我有效:
如何放弃所有本地更改并将文件重置为当前分支上的最后一次提交?
# Execute on the root of the working tree...
# Discard all changes to tracked files
git checkout .
# Remove all untracked files
git clean -fd
注意:忽略的文件将不受影响
如果您在顶级项目目录中,请尝试以下操作:
git restore .
如果没有,则使用:
git restore :/
如果要还原子集的本地更改:
使用top pathspec magic还原所有工作树文件:git restore:/还原当前目录中的所有文件:gitrestore。文件类型(例如所有C源文件):git restore“*.C”
有关详细信息,请参阅git restore文档。
要删除未跟踪的文件:gitclean-f
在阅读了一堆答案并尝试之后,我发现了各种边缘情况,这意味着有时它们无法完全清理工作副本。
这是我目前使用的bash脚本,它一直有效。
#!/bin/sh
git reset --hard
git clean -f -d
git checkout HEAD
从工作副本根目录运行。