gpt4 book ai didi

Git 提交触及子树/子文件夹

转载 作者:行者123 更新时间:2023-12-05 02:19:45 26 4
gpt4 key购买 nike

我有一个 monorepo 项目 proj 使用 proj/sub 下的文件夹 sub 中的子树。我做了很多涉及 projsub 的提交。如何有效地将相关更改发布到上游 sub

通常,我必须使用 cherry-pick 每个提交

git cherry-pick -x --strategy=subtree -Xsubtree=sub/commit-ref

但我已经做了无数次提交,所以这是不可行的。如何立即将更改集成到 sub 中?例如,创建一个大的压缩提交,将 sub 带到与我的 monorepo 中相同的状态。

相关:View commits that make changes to subfolder , How to cherry pick a range of commits and merge into another branch

最佳答案

目前的解决方案:主要是 rebase

使用几个 cherrypicks 进行一些 rebase 就可以了,但到目前为止我还没有找到使用单个命令的自动化方法。使用

git rebase -s subtree -Xsubtree=sub --onto sub_master proj_ini proj_end

复制到子项目 master 分支 sub_master 所有顶层 proj 从 ref proj_ini 提交(独占)到 ref proj_end(含)。您所在的分支机构无关紧要。对于每次提交,可能会发生这些事情:

  1. 仅涉及子项目 sub 的提交将被干净地复制

  2. 只涉及 sub 之外的文件的提交将不会显示。由于我们正在 rebase ,因此这些都被默默地忽略了。如果你愿意挑选这个类型的提交,将发生错误,告知空提交不是允许( future 的 Git 版本可能有 git cherry-pick --skip-empty)

  3. sub 及其外部都有更改的提交将复制了完全相同的消息,但只保留了相关的更改/文件,其余的被完全忽略

  4. proj 重命名/移动到 sub 被干净地重写为创作

  5. merge 提交大部分都被清楚地说明了,但也有一些异常(exception)

    5.1 显式忽略您对来自 subproj master 所做的最新 merge 提交。

    5.2 使用 cherrypick 显式 merge 某些涉及冲突解决的 merge 提交(当前分支必须是 sub_master):

     git cherry-pick -x --strategy=subtree -Xsubtree=sub -m 2 merge_ref

    其中 -m 对于每个父项通常为 1 或 2。 (在实践中,我会盲目地尝试其中一个和 git cherry-pick --abort,如果我遇到冲突或不需要的更改,则尝试另一个)

关于Git 提交触及子树/子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com