命令git checkout删除了一些提交

时间:2016-03-08 08:05:38

标签: git commit git-checkout

我使用命令git checkout 1234568查看旧提交。 之后我直接检查了另一个提交git checkout master,然后我再次检查了主人git log --oneline。但现在我的网站是旧版本。

我执行<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?><DATA> <Time>2016-02-12T00:00:00.211Z</Time> <Item> <ID>123456789</ID> <VAR1>897654564dDJUHFKHJHEU</VAR1> </Item> <Check>OK</Check> </DATA> 后,我意识到我的两个最新提交都丢失了!为什么会发生这种情况并且可以恢复它们?

是不是因为我必须在结帐到另一次提交之前每次都要再次结账?

1 个答案:

答案 0 :(得分:4)

在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选项更改此限制。