假设我们有两个 git 分支,
a
和 b
(为简单起见,假设它们都是本地分支)。分支 a
是我可以使用的,分支 b
不是;我不敢碰它。
我想“声明”或“标记”将
b
合并到 a
中,而不实际对分支 a
中的代码进行任何更改。我不介意做一个空的提交来表示合并。动机是分支 b
上发生了多余的工作,自从它们分叉以来,这些工作被包含在 a
上完成的工作中。
假设这是一件“合法”的事情 - 惯用的方法是什么?
我认为它可以很容易地制作成这样:
git commit-tree -p a -p b -m "not pulling b changes" a^{tree}
这样,您就要求 git 创建一个新的修订对象,该对象以
a
和 b
作为父级,以 a
s 树作为其树(因此与 a
没有区别),其注释为我在那里提供的(随意调整)。该对象将被创建,并且 id 将被打印在标准输出上。您可以检查它以确保它是您想要的:
git diff that-id a
git log that-id
gitk that-id
应该没有差异。如果你喜欢的话,你可以移动一个:
git branch -f a that-id
没有惯用的方法来做到这一点,因为它不是常见的用例。假设您只是不想拥有未合并的分支,那么有一些解决方法可能适合您,具体取决于您的情况:
我现在是这样做的:
git br a
git merge --no-commit b
(如果 git pull --no-commit remote-name-here b
是远程的,则为 b
)a
版本git commit
并更改评论以表示我正在标记为合并而不采用更改。基于
man git merge
,我认为在分支git merge b -s ours
上执行a
应该可以解决问题。
请注意,-s ours
与 -Xours
不同,后者会调用带有参数 ort
的默认 ours
合并策略。
免责声明:未经测试。