Git 如何恢复reflog列表,使整个列表显示在";吉特日志;也
我是git新手,我试图将一些东西推送到我的远程存储库,当它不起作用时,我重置了git,现在我可以看到我的代码没有消失(这是我代码的最后一个工作良好的版本仍然存在),这是一种解脱。但是当我运行“git log”时,它只显示最后一次提交。我有点喜欢我的提交历史,当我在我的项目中前进的时候,我希望能够在我以前的代码发展和进步的过程中看到它们。因此,当我执行“git reflog”时,我可以看到它们,但当我执行“git log”时,我只能看到最后一个 因此,在我的例子中,我没有丢失任何东西,我的最后一次提交就在那里,我的代码是最新的,直到它的最后一个版本,只是我看不到提交的历史记录。我想像以前一样查看我的提交历史。就这样 有人能帮忙吗 另外,请尽快帮助我,因为我已经阅读了每90天清理一次的reflog!:(Git 如何恢复reflog列表,使整个列表显示在";吉特日志;也,git,github,git-log,Git,Github,Git Log,我是git新手,我试图将一些东西推送到我的远程存储库,当它不起作用时,我重置了git,现在我可以看到我的代码没有消失(这是我代码的最后一个工作良好的版本仍然存在),这是一种解脱。但是当我运行“git log”时,它只显示最后一次提交。我有点喜欢我的提交历史,当我在我的项目中前进的时候,我希望能够在我以前的代码发展和进步的过程中看到它们。因此,当我执行“git reflog”时,我可以看到它们,但当我执行“git log”时,我只能看到最后一个 因此,在我的例子中,我没有丢失任何东西,我的最后一次
干杯,如果您使用了
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
,或者在我的例子中,branchsdev
和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条目,它将不再保护提交(在本例中为commitfaded00
)。如果其他内容仍在保护提交,则提交仍然是安全的。但是,如果没有任何内容保护它,则可能会对其进行垃圾收集,从而最终将其删除。您的历史记录怎么可能已消失?您是说您当前的分支确实只显示一次提交作为其历史记录?您是否检查了信息页面?这是什么我运行“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