
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為準?!久赓M下載鏈接】jjA Git-compatible VCS that is both simple and powerful項目地址: https://gitcode.com/GitHub_Trending/jj/jj創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考