ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Jujutsu 的 jj absorb 怎么把修改自动归入最近改过对应行的提交?

Jujutsu 的 jj absorb 怎么把修改自动归入最近改过对应行的提交? Jujutsu 的 jj absorb 怎么把修改自动归入最近改过对应行的提交【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj你刚在 Jujutsu 仓库里堆了一串提交又在 working copy 里随手改了几行现在希望把这几行改动分别折回最后修改过对应行的那一个提交里而不是再建一个补丁提交。在 Git 里要达到同样效果需要给每个目标提交逐个执行git commit --fixup ID再跑git rebase --autosquashJujutsu 用一条命令替代这个流程jj absorb。它会自动拆分源修订里的改动把每一处改动移到对应行最近一次被修改的、最近的可变祖先提交上并把改动无法确定归入哪一个提交的行留在原地。本文的任务就一件事在已有提交栈上把 working copy或某个源修订中的小修小补自动归并到栈中合适的提交并验证结果。jj absorb 的归并规则根据 CLI reference 中jj absorb的说明这条命令的行为可以拆成四条规则命令把源修订的改动拆开每一处改动移动到最近的可变祖先closest mutable ancestor中对应行最后被修改的那个提交如果目标修订无法被唯一确定该处改动留在源修订里不会瞎猜如果源修订的所有改动都被吸走且源修订没有描述源修订会被 abandon命令造成的仓库变更可以用jj op show -p复查。jj absorb是 0.24.0 引入的命令见 CHANGELOG定位为自动把当前提交的改动压入相关祖先提交。docs/git-experts.md 一节 jj absorbmakes it easier to update a patch stack 也说明了它的典型场景working copy 里做了小修小补想把它并入栈里对应的提交而不需要逐个手写 fixup。准备条件先有一串提交和一处小改动命令的默认值已经把最常见的情况覆盖了jj absorb源修订-f/--from默认是即当前 working copy 修订目标范围-t/--into别名to默认是mutable()即所有可变修订且只会在源修订的祖先里找。也就是说只要你在里改动了若干行且这些行在提交栈里能被唯一地对应到某个祖先提交直接运行jj absorb就能完成归并。如果需要先复现这个场景可以按 tutorial 里构建提交栈的方式做用jj new -m逐个建提交每个提交修改同一个文件再在最后的 working copy 里对其中某一行做一次小修正。执行步骤基本用法整栈吸收在 working copy 里完成修改文件会出现在的 diff 中后直接运行jj absorb能归入栈中某个提交的行会被移走不能唯一归类的行留在中此时不会为空也就不会被 abandon。只处理部分文件如果 working copy 里混了不想动的文件用 FILESETS 参数限定路径。FILESETS的说明是Move only changes to these paths (instead of all paths)jj absorb src/main.rs显式指定源和目标默认参数不合适时用-f和-t指定jj absorb --from --into mutable() description(B)注意-t/--into只考虑源修订的祖先写进去的非祖先修订不会生效。交互式挑选 hunk不想整个提交都被吸收时用-i/--interactive打开 diff 编辑器只勾选要吸收的 hunk这些 hunk 随后可能被分配到多个祖先提交。--tool NAME用于换一个 diff 编辑器并隐含--interactivejj absorb -i jj absorb --tool difftastic按 CHANGELOG 的说明交互式选择适合只想吸收提交的一部分、又不想先手动 split的情况未选中或无法唯一归类的 hunk 会留在源修订中。验证结果文档给出的复查方式是查看这次操作造成的 diffjj op show -p它会展示jj absorb对仓库做了什么修改可以据此确认每一行改动落到了哪个提交上。再用jj log查看提交栈确认源修订中能被吸收的行已经消失对应祖先提交的描述/内容包含这些改动源修订如果变空且无描述会被 abandon这是 CHANGELOG 中记录的明确行为。已知限制与剩余改动jj absorb不解决所有情况。docs/git-experts.md 明确指出的边界同一行被栈里多个提交改过如果 working copy 改的那一行在栈中被多个提交修改过该处改动不会被移动需要你决定如何把剩余改动压入对应提交例如用jj squash手动处理。文件删除jj absorb可以在目标修订中添加了一个文件、而该文件被删除时把删除压入对应的目标修订CHANGELOG 记录的行为。换句话说jj absorb负责把能唯一归类的行自动归位归不进去的行和提交会保留在源修订里留给你做最终判断而不是静默丢弃。更多参数细节FILESETS 语法、--tool可用值等可以直接参考 CLI reference 的jj absorb一节或在仓库中运行jj help absorb获取更权威的输出——CLI reference 本身注明以jj help为准。【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表