Pat Notz 是对的。只要在几天之内,您就可以获得提交。除非你明确告诉它删除更新的 blob,否则 git 只会在大约一个月后收集垃圾。
$ 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 重置时,它被放回原位。
您要做的是指定要还原到的提交的 sha1。您可以通过检查 reflog( git reflog
)然后执行来获取 sha1
git reset --hard <sha1 of desired commit>
但是不要等待太久...... 几周之后,git 最终会将提交视为未引用并删除所有 blob。
答案隐藏在上面的详细回复中,您可以简单地做到:
$> git reset --hard HEAD@{1}
(参见git reflog show的输出)