是否可以撤消由以下命令引起的更改?如果是,怎么办?
git reset --hard HEAD~1
是否可以撤消由以下命令引起的更改?如果是,怎么办?
git reset --hard HEAD~1
当前回答
数字刷新
在列表中找到提交sha,然后将其复制并粘贴到以下命令中:
git cherry pick<the sha>
其他回答
数字刷新
在列表中找到提交sha,然后将其复制并粘贴到以下命令中:
git cherry pick<the sha>
您要做的是指定要还原到的提交的sha1
git reset --hard <sha1 of desired commit>
但不要等太久。。。几周后,git将最终看到提交未被引用,并删除所有blob。
帕特·诺茨是正确的。你可以在几天内收回承诺。git只会在大约一个月后收集垃圾,除非您明确告诉它删除更新的blob。
$ git init
Initialized empty Git repository in .git/
$ echo "testing reset" > file1
$ git add file1
$ git commit -m 'added file1'
Created initial commit 1a75c1d: added file1
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file1
$ echo "added new file" > file2
$ git add file2
$ git commit -m 'added file2'
Created commit f6e5064: added file2
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file2
$ git reset --hard HEAD^
HEAD is now at 1a75c1d... added file1
$ cat file2
cat: file2: No such file or directory
$ git reflog
1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{1}: commit: added file2
$ git reset --hard f6e5064
HEAD is now at f6e5064... added file2
$ cat file2
added new file
您可以在示例中看到,由于硬重置,file2被删除,但当我通过reflog重置时,它被放回原位。
如果您使用的是JetBrains IDE(任何基于IntelliJ的),您甚至可以通过其“本地历史记录”功能恢复未提交的更改。
右键单击文件树中的顶级目录,在上下文菜单中找到“本地历史记录”,然后选择“显示历史记录”。这将打开一个视图,在该视图中可以找到您最近所做的编辑,一旦找到要返回的修订,请右键单击该修订并单击“还原”。
制作了一个很小的脚本,以便稍微容易地找到要查找的提交:
git fsck--lost found | grep commit | cut-d“”-f 3 | xargs-i git show \{\}| egrp“^commit |日期:”
是的,它可以用锥子或类似的东西做得更漂亮,但它很简单,我只是需要它。可能会为其他人节省30秒。