为什么在 Jujutsu 中刚创建的提交在 jj log 里看不到【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj你用jj new、jj commit或编辑工作副本后创建了一个提交但运行jj log时列表里没有它。这是 Jujutsujj里最常见的困惑之一原因只有两类默认日志只展示仓库中提交的一个子集或者该提交已经被放弃abandoned、变成了隐藏版本。本文按 FAQ 中 “Where is my commit, why is it not visible injj log?” 给出的排查顺序先定位是哪一类再分别给出验证和恢复方法。第一步用all()判断是“被过滤”还是“已隐藏”先运行jj log -r all()这一步的作用是把日志范围扩到仓库中所有可见的提交绕开默认过滤条件。根据结果分两条路径提交出现了提交还在只是被默认的日志 revset 排除了。走下面的「原因一」。提交仍未出现提交很可能已被放弃——例如你运行过jj abandon或它是被jj rebase、jj describe等命令重写过的旧版本obsolete。走下面的「原因二」。原因一默认 revset 只展示部分提交jj log在没有指定-r和路径参数时只展示revsets.log配置的提交集合。根据 配置文档其默认值是builtin_log()定义为present() | ancestors(immutable_heads().., 2) | trunk()也就是说默认日志显示的是当前工作副本提交、不可变提交trunk、tag、未跟踪的远端 bookmark 等向内的两层祖先、以及 trunk。按 FAQ 的说法远端上的大多数提交默认是不显示的显示的只是本地提交及其直接父提交作为上下文。如果你刚创建提交后把移走了或者提交挂在某个不在上述范围内的分支上它在默认jj log里就看不到了。验证方式临时查看直接传-r覆盖默认 revset例如jj log -r ..。..列出仓库中除 root 外的所有可见提交效果接近git log见 FAQ “How can I getjj logto show me whatgit logwould show me?”。确认你的提交在jj log -r all()或jj log -r ..中出现且父提交关系正常就说明提交本身没有问题纯粹是显示范围问题。长期修改默认显示范围在配置中覆盖revsets.log把日志固定到你关心的集合例如 配置文档 给出的示例[revsets] # Show commits that are not in mainorigin log mainorigin..配置后可以运行jj log不带参数验证你的提交应出现在图中。如果你只是临时想多看几个提交也可以把 revsets 表达式 里提到的connected()函数套在你的 revset 上它会补全连接中间节点见文末「另一种容易混淆的情况」。一个需要留意的边界配置文档 提醒当revsets.short-prefixes未显式指定时它默认取revsets.log的值影响 change/commit ID 短前缀的解析。只改revsets.log不改revsets.short-prefixes时大型仓库中命令行所需的前缀长度可能会变长——改完配置后如果发现短 ID 报“非唯一前缀”同时显式设置revsets.short-prefixes。原因二提交已被放弃变成 hidden 版本如果jj log -r all()里也没有说明该修订可能已被放弃e.g. 用了jj abandon或它是被jj rebase、jj describe等命令重写后留下的旧版本。此时按 FAQ 的处理方式用jj log -r commit_id查看该提交commit_id换成该提交实际的 commit ID。被放弃的提交会以hidden标记显示出来。commit ID 从哪里来创建提交时命令输出、之前jj log的输出里都有完整 commit ID如果已经不记得可以运行jj evolog——它会列出工作副本修订的全部历史版本旧版本标记为(hidden)change ID 不变但 commit ID 不同见 FAQ 中关于查看快照历史的问答。隐藏提交也可以用 change ID 加 change offset 引用例如lnvvtr/1。确认是想要的版本后运行jj new commit_id基于它创建新提交该修订就会重新可见。验证方式再运行jj log新提交及其父链原隐藏提交出现在图中。注意隐藏提交仍可用大多数jj命令操作如jj diff但需要用 commit ID 引用jj log默认不显示它们这是正常现象而不是数据丢失。另一种容易混淆的情况提交在但中间显示 (elided revisions)有时提交其实显示着只是与它之间隔着一个~ (elided revisions)标记。这是另一种机制当 revset 同时包含一个修订及其某个祖先、但两者之间的连接修订不在 revset 中时图中就会出现该标记见 FAQ “What are elided revisions in the output ofjj log?”。文档示例$ jj log -r tyl|mus ○ musnqzvt meexample.com 1 minute ago 9a09f8a5 │ Revision C ~ (elided revisions) ○ tylynnzk meexample.com 1 minute ago f26967c8 │ Revision A这是文档示例输出节点和 ID 以你仓库实际输出为准。解决办法是用connected()把连接修订补进 revsetjj log -r connected(tyl|mus)补全后 Revision B 会出现在 A 和 C 之间。小结按顺序核对jj log -r all()—— 出现即原因一revset 过滤不出现即原因二hidden/abandoned。原因一用-r ..或配置revsets.log调整显示范围注意与revsets.short-prefixes的联动。原因二jj log -r commit_id看到(hidden)标记jj evolog找回旧版本jj new commit_id恢复可见。进一步参考revsets 文档含 Hidden revisions 一节说明隐藏提交只在你显式提到它们时才进入搜索空间和 配置文档Log 一节。【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考