Git 如何恢复reflog列表,使整个列表显示在";吉特日志;也

Git 如何恢复reflog列表,使整个列表显示在";吉特日志;也,git,github,git-log,Git,Github,Git Log,我是git新手,我试图将一些东西推送到我的远程存储库,当它不起作用时,我重置了git,现在我可以看到我的代码没有消失(这是我代码的最后一个工作良好的版本仍然存在),这是一种解脱。但是当我运行“git log”时,它只显示最后一次提交。我有点喜欢我的提交历史,当我在我的项目中前进的时候,我希望能够在我以前的代码发展和进步的过程中看到它们。因此,当我执行“git reflog”时,我可以看到它们,但当我执行“git log”时,我只能看到最后一个 因此,在我的例子中,我没有丢失任何东西,我的最后一次

我是git新手,我试图将一些东西推送到我的远程存储库,当它不起作用时,我重置了git,现在我可以看到我的代码没有消失(这是我代码的最后一个工作良好的版本仍然存在),这是一种解脱。但是当我运行“git log”时,它只显示最后一次提交。我有点喜欢我的提交历史,当我在我的项目中前进的时候,我希望能够在我以前的代码发展和进步的过程中看到它们。因此,当我执行“git reflog”时,我可以看到它们,但当我执行“git log”时,我只能看到最后一个

因此,在我的例子中,我没有丢失任何东西,我的最后一次提交就在那里,我的代码是最新的,直到它的最后一个版本,只是我看不到提交的历史记录。我想像以前一样查看我的提交历史。就这样

有人能帮忙吗

另外,请尽快帮助我,因为我已经阅读了每90天清理一次的reflog!:(


干杯,

如果您使用了
git reset
,您可能已经移动了分支标签以指向不同的提交(这就是
git reset
所做的,或者更准确地说,git reset可以做的事情之一)也就是说,假设您在一个名为
xyzbranch
的分支上有一些提交,因此
xyzbranch
指向最顶端的提交,标记为
*
。让我们进一步假设有一个
源/xyzbranch
指向另一个提交,可能是链中较早的一个提交,甚至可能是在t的一个分支上他用链子;让我们用一个更大的(大写)
O
标记这个:

                         xyzbranch
                             |
                             v

... <- o <- ... <- O <- o <- *

                   ^
                   |
            origin/xyzbranch
这将指示git更改当前分支指向的提交,以便它指向您刚才命名的提交。结果如下:

               xyzbranch
                   |
                   v

... <- o <- ... <- O <- o <- *

                   ^
                   |
            origin/xyzbranch
(这些提交消息非常糟糕,因为这是我用来测试某些合并案例的临时存储库)

最左边的部分是哈希的缩写版本,这是一个可以随时使用的字符串。下一部分,
HEAD{3}
dev{1}
或其他任何内容,是一个相对索引(相对于
@
之前的名称)这告诉git在特定的reflog中搜索的深度。每次更新ref时,不管它是
HEAD
(跟踪“当前分支”,不管它是什么分支),还是像
xyxbranch
,或者在我的例子中,branchs
dev
master
,git都会添加一个新的reflog条目(或者两个,如果
HEAD
像通常那样命名一个分支)。这会将所有其他reflog条目向下推一步,这样以前在
HEAD@{3}
中的内容现在都在
HEAD@{4}

如果这就是您所做的,并且您希望
xyzbranch
再次指向提交
*
,您可以使用
git reflog xyzbranch
查看
xyzbranch
用于指向的位置,以及什么操作改变了它。在我的情况下,我对
头部进行了重置(它实际上是master,所以我也可以在
master
上看到它,但我将使用默认的
HEAD
reflog)。操作
reset:…
显示我的
git reset
命令,所以在这之前指向的
HEAD
位置都是有趣的。您可以输入任何一个数字(这里,
0cba526
)或者将索引名称(
HEAD@{1}
,此处)添加到
git log
git show
查看它

找到正确的提交后,您可以使用
git reset
将分支标签移回原来的位置。或者,如果您想将分支标签保持在现在的位置,可以创建一个指向所需提交的新分支。假设我想将
0cba526
移到一个新分支上。有两个命令可以做到这一点:

$ git branch newbr 0cba526
或者,如果您希望git位于
newbr
-即,首先创建
newbr
,指向提交
0cba526
,然后也执行
git签出newbr

$ git checkout -b newbr 0cba526
(请注意,这两项都要求您的工作树是干净的,就像之前的
git重置--hard
)之后一样。让我们绘制最后一个图形,这是在
git branch newbr 0cba526
命令之后的图形,这次还将
HEAD
添加到图片中:

                 HEAD
                   |
                   v
               xyzbranch   newbr
                   |         |
                   v         v

... <- o <- ... <- O <- o <- *

                   ^
                   |
            origin/xyzbranch
如果答案是“是,
faded00
ac0ffee
的祖先”,那么我们选择90天,否则我们选择30天。然后我们检查
master{123}
的日期戳,如果它太旧,我们将其丢弃,这样
master{124}
向下移动一天,成为新的
master 123}


一旦放弃reflog条目,它将不再保护提交(在本例中为commit
faded00
)。如果其他内容仍在保护提交,则提交仍然是安全的。但是,如果没有任何内容保护它,则可能会对其进行垃圾收集,从而最终将其删除。

您的历史记录怎么可能已消失?您是说您当前的分支确实只显示一次提交作为其历史记录?您是否检查了信息页面?这是什么我运行“git reflog”时看到:提交a2256194e696efd6979782b398c8fc89935c0517作者:威尼斯日期:Wed Apr 20 14:15:13 2016+1000我不知道git发生了什么事!提交842977dc565cd7bd316ed37d817d90c58b285dc6作者:威尼斯日期:Fri Apr 1 17:44:09 2016+1100首次提交提交159EC182B0C9D3BF51020B1CC4108B5E618771B但当我运行“git日志”时,我看到这样的情况:a225619头{0}:提交:我不知道git发生了什么!842977d头{1}:重置:移动到原点b0d82e0头{2}:commit:same 9b0967e HEAD@{3}:commit:Shopping cart服务和指令添加了84ba8bf HEAD@{4}:commit:added error promission
$ git checkout -b newbr 0cba526
                 HEAD
                   |
                   v
               xyzbranch   newbr
                   |         |
                   v         v

... <- o <- ... <- O <- o <- *

                   ^
                   |
            origin/xyzbranch
git merge-base --is-ancestor faded00 ac0ffee