命令 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
选项更改该限制。
我使用命令 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
选项更改该限制。