命令 git checkout 删除了一些提交

command git checkout deleted a few commits

我使用命令 git checkout 1234567 查看旧提交。 紧接着我检查了另一个提交 git checkout 1234568 然后我再次检查了 master git checkout master。但是现在我的网站是旧版本。

执行git log --oneline后,我发现我最近的两次提交都丢失了!为什么会发生这种情况,是否可以恢复它们?

是不是因为我每次在签出到另一个提交之前都必须再次签出以掌握?

在Git中,nothing is lost只要你已经提交了1.

您可以使用 reflog 获取 日志 master 一直指向的提交,方法是说:

git reflog master

reflog 中找到 最新的丢失提交 后,您可以使用 master 再次指向它 git reset.

例如,假设最近丢失的提交在 reflog 中的 4th 条目上。为了在 master 上恢复它,你会说:

git checkout master
git reset --hard master@{4}

其中 master@{4} 指的是 master 从现在指向 4 个条目之前的提交。

请注意,在您重置 master 之前,您应该确保您的工作目录是 clean,也就是说您没有任何 未提交 更改。


1.嗯,几乎 没什么。如果经过足够的时间,无法访问的提交将 最终 被删除。默认情况下,它们将保留 30 天,但您可以通过 gc.reflogExpireUnreachable 选项更改该限制。