假设现有的Git跟踪模块(M)具有提交M1-M2-M3。
我有一个应用程序(A)的Git存储库,提交A1-A2-A3。存储库包含M作为子模块(git submodule add URL DIRECTORY
),但它不是最新的M - 而是使用较旧的提交M1(subproject commit 187cac115b5f4fdeb39c25c79e882d30ee9624be
)。
我的问题是:我想使用提交M3的内容,但有一段时间我不能使用提交M2。这种限制最终会通过,但目前它是无法克服的。那么,我的选择是什么?
如果M不是子模块而是A的一个分支,那将很容易:
Cherry-pick
M3进入A3,形成A4。有了子模块,我不知道。唯一的"直接"我能想到的解决方案涉及以下步骤:
Cherry-pick
M3进入B,形成M4。然而,这涉及M的变化,这很大程度上取决于M的所有者是否愿意接受他们,他没有真正的理由(因为这些变化不会带来任何变化)但M)的额外复杂性。我更倾向于一个我不必强加给M的解决方案。
有间接解决方案,可能:
Reverse-commit
M2进入B,形成M4。这对M的侵入性要小得多,这很好。然而,它使分支B永远不合并,我认为这是一个非常糟糕的情况(因为我使用未合并的分支列表作为一种" TODO列表")。
处理这种情况的最佳方式是什么?
感谢。
答案 0 :(得分:1)
您可以通过在不再需要时删除它们来避免使用未合并的分支。
我会发现你的第一个解决方案很奇怪,因为M5是一个基本上没有附加价值的合并。它会污染您的版本历史记录。
我要做的是:
old_something
标记M4,按下标记,然后删除分支B(也来自远程仓库)。这样,与另一个人的回购的唯一交互是你创建一个新的(临时)分支,然后他留下了一个标签(没有未合并的分支,但是一个标签。没有真正的区别,但如果你使用todo列表的未合并分支,这解决了你的问题)
实际上,我会说子模块的情况是更好而不是A的分支。您现在不会通过不必要的合并来污染您的版本历史记录。