#10028·jj

FR: 为 JJ 分割引入可配置的身份策略

作者: jgirata创建于 2026年8月21日更新于 2026年9月14日

你的功能请求是否与问题有关?请描述。jj split将一个提交分割为两个。它必须选择哪个提交获得原始更改 ID,哪个获得原始提交的书签。jj 的选择对我来说大多数时候是错误的(但并非所有)。它的选择对其他人来说大多数时候是正确的(但并非所有)。例如,具体来说: * 将更改 ID 和书签放在包含剩余更改的提交中通常是所需的,当将重构提交从功能提交中分割出来,但打算用两个提交打开一个 PR 时。 * 将更改 ID 和书签放在包含选择的更改的提交中通常是所需的,当将包含两个逻辑上独立更改的提交分割为两个提交,每个提交中有一个更改,并打算为每个提交打开一个单独的 PR 时。此外,当前的默认行为是将更改 ID 移动到包含选择更改的提交中,将书签移动到包含剩余更改的提交中,这很混乱。 ### 描述你希望的解决方案 我希望引入可配置的策略,用于决定哪个分割提交获得更改 ID 和书签。最初将实现三种策略:selectedremainingfollow-description。 * remaining(默认) - 包含用户剩余更改的提交将获得更改 ID 和书签。这是顺序分割中的第二个/子提交。 * selected - 包含用户选择的更改的提交将获得更改 ID 和书签。这是顺序分割中的第一个/父提交。 * follow-description - 如果原始描述不为空,且其中一个分割提交与原始描述完全匹配,则具有匹配描述的提交将获得更改 ID 和书签。配置将接受策略列表。follow-description 策略可能无法选择提交,因此它将优先于下一个配置的策略。remaining 将是默认策略和最后手段。在所有情况下,获得原始更改 ID 的提交还将获得书签。split.legacy-bookmark-behavior 将被废弃。split.identity-strategy 将覆盖此废弃设置。如果split.identity-strategy 未设置,且split.legacy-bookmark-behavior 设置,则split.legacy-bookmark-behavior=true 将被视为split.identity-strategy="remaining",而split.legacy-bookmark-behavior=false 将被视为split.identity-strategy="selected"。使用交互式编辑器为每个提交设置描述时,默认编辑器内容包括更改 ID。使用follow-description 策略,我们无法提前知道哪个提交将获得每个更改 ID。编辑器将显示如果采用follow-description 策略,将设置的更改 ID。 (请参见下面关于替代方案的讨论。)对于分割带移动的情况,strategy=selected