我知道编辑这个网站吗?

Git 转发日志

什么是“参考”?

在Git中,“ref”是指向提交图的指针(要可视化提交图,请使用出色的工具gitk

路径被实现为引用(“refs/heads/main”)、跟踪分支(“refs/remotes/origin/main”)和标签(“refs/tags/v1.0”)。约定标签不会移动(前进),而路径会移动(前进)。这些命名引用也称为符号引用

只要它们明确,您就可以通过简洁的“refs/heads/”、“refs/remotes/”和“refs/tags/”来省略符号引用。

每个提交都有一个唯一的标识符,即 40 位十六进制字符串,也称为提交名称。由于每个提交都知道其父级别,因此推断提交名称是指该提交的整个历史记录,而不是提交本身。提交名称是通信的引用类型。

通常,写出整个 40 位十六弦字符串很麻烦,但您可以使用它的缩写,只要它是唯一的(即只要没有其他同名对象)。通常,您需要使用 8 位数字。示例:d4326e921b226639aae7dfbf8d24b934714e60d2 可缩写为 d4326e92。

有一些特殊的引用,默认情况下是大写的:

  • HEAD:这是指向当前路径的指针,即通常指向“refs/heads/main”之类的东西。

  • ORIG_HEAD:拉取或合并时,ORIG_HEAD 指的是以前的版本。

  • FETCH_HEAD:拉取或获取时,获取的引用存储在 FETCH_HEAD 中。注意:如果您使用不带参数的方便的git pull,则 FETCH_HEAD 很可能包含多个引用,并且它没有真正用处。

然后,还有重新记录。

转发日志

如前所述,提交包含通过推理导致该提交的整个历史记录。

但还有另一个历史记录通常非常有用:历史记录,如 _local_ 存储库所见。例如,如果您周日没有工作,但其他人工作了,并且您在周一拉了更改,则您可以在周日下午 1:00 更改项目的提交,可能会提交很多次(如果两个人处理该项目,其中一个人手动了另一个人的更改)。但是,您当前的本地存储库实际上处于一种状态,即周日下午 1:00。

这种类型的历史称为reflog,它是纯线性的(至少在我们可以时光倒流之前)。

要查看引用的引用日志,只需调用

~/fiji$ git reflog show main

或者

~/fiji$ git reflog show HEAD

为了方便入门,不带参数的git reflog显示了HEAD的reflog。

为了方便进一步入门,您可以通过使用参数 -g 调用它,说服 git log 显示引用日志历史记录而不是“真实”历史记录:

~/fiji$ git log -g

reflog 边界为 refs,其形式为“HEAD@{0}”、“HEAD@{1}”等。其中数字 0 表示当前版本,1 表示上一个版本,此类依推。

但转发日志延伸知道顺序:他们还知道日期。 试试这个:

~/fiji$ git log -g --date=relative

它会向你展示类似的东西

commit 28b4fbcc8ba45996fa2c9b660e13f309443b55bd
Reflog: HEAD@{23 hours ago} (Johannes Schindelin <johannes.schindelin@gmx.de>)
Reflog message: pull : Fast forward
Author: Johannes Schindelin <johannes.schindelin@gmx.de>
Date:   23 hours ago

    Add a Makefile target to create a .dmg file

    For the moment, this script only works on macOS :-(

    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

commit e73abb095c1905063c22d3977433edaaa1e5dac9
Reflog: HEAD@{23 hours ago} (Johannes Schindelin <johannes.schindelin@gmx.de>)
Reflog message: pull : Fast forward
Author: Johannes Schindelin <johannes.schindelin@gmx.de>
Date:   23 hours ago

    check-class-versions: do not delete the temporary macro file

    check-class-versions creates a temporary macro file which is then
    executed in headless mode.  However, when falling back on macOS,
    it was deleted before ImageJ saw it.

    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

commit 433a55259e0b105420263c433a370ef5423d1976
Reflog: HEAD@{26 hours ago} (Johannes Schindelin <johannes.schindelin@gmx.de>)
Reflog message: merge origin/contrib: Fast forward
Author: Johannes Schindelin <johannes.schindelin@gmx.de>
Date:   27 hours ago

    Fix crash on Win32

    When making the error reporting better, a bug slipped in which led to
    NULL being dereferenced.  This commit fixes that.

    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

...

因此,您还可以使用类似 HEAD@{1 day ago} 的内容来引用引用日志。为了方便起见,您可以用点替换空格,这样就不必要引用参数。

引用日志对于引用bisecting时的提交非常有用:您可能碰巧知道某些东西在前§§1§§§有效,但在当前版本中停止工作:git bisect bad HEAD