我可以在reflog中添加一行吗?

时间:2016-04-21 12:48:12

标签: git git-reflog

由于拙劣的git commit --fixup,我处于rebase地狱的中间。我想我已经确定了来源,而且我比起初更好。但是,如果我查看git reflog,这个'rebase -i'行的序列看起来就像我以前的拙劣尝试。

我可以将自己的行添加到reflog中吗?说一些看起来像的东西:

$ git reflog mark '== we are not worse off than we started here =='
$ git reflog -3
cb6536f HEAD@{0}: mark: == we are not worse off than we started here ==
cb6536f HEAD@{1}: rebase -i (finish): fixup! foo: baz the widgets
9db07de HEAD@{1}: rebase -i (pick): fixup! baz: implement widget bazzing

2 个答案:

答案 0 :(得分:2)

您可以随时使用git用于添加新的reflog条目的相同命令添加新的reflog条目,即git update-ref。这是一个“管道”(面向脚本)命令,因此它不是非常用户友好,您可能想要添加自己的小包装脚本或别名。

示例:

git update-ref -m 'mark: whatever' HEAD HEAD
git update-ref -m 'mark: another thing' refs/heads/branch branch
git update-ref -m 'mark: third thing' refs/heads/branch refs/heads/branch
hash=$(git rev-parse refs/heads/branch) && \
   git update-ref -m 'mark: 4' refs/heads/branch $hash

请注意,<ref>(第一个非选项参数)必须完全拼写出来。 <newvalue>可以解析为有效的SHA-1,这就是三个示例的中间命令可以工作的原因,但为了安全起见,最好使用第三种形式(重复<ref>使用实际的SHA-1哈希(第四种形式),让git rev-parse验证这实际上是一个有效的分支名称。

(当使用HEAD时,您可以跳过验证,因为如果HEAD不是有效名称,则git根本无法运行。)

答案 1 :(得分:0)

如本2020 thread中所述:

option core.logAllRefUpdates,其值为“ if (strpos($rawResponse, "{")) { $index = strpos($rawResponse, "{"); echo substr($rawResponse, $index); } else { echo "'{' this character not found!"; } ” 在更现代的Git版本中。
该文档说:

如果该选项设置为always,则会自动为refs /下的任何参考创建缺少的参考日志。

现在,假设您希望所有引用都使用reflog,但是拥有reflog而不使用它确实没有太大的弊端。

Jeff Kings添加:

当前规则实际上是在已存在的任何reflog后面追加,或在决定是否创建不存在的reflog时参考always。所以我认为设置一个一次性配置变量,例如:

core.logAllRefUpdates

将创建reflog,然后任何后续更新(即使没有该配置集)也将追加到该更新。

您也可以这样做:

git -c core.logAllRefUpdates=always update-ref refs/foo/bar ...

但是我不推荐。
当我们最终转向支持其他ref后端格式时,它们不一定会以相同的方式存储日志。