由于拙劣的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
答案 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后端格式时,它们不一定会以相同的方式存储日志。