如何将 git 分支声明为合并而不采用其中的更改?

问题描述 投票:0回答:4

假设我们有两个 git 分支,

a
b
(为简单起见,假设它们都是本地分支)。分支
a
是我可以使用的,分支
b
不是;我不敢碰它。

我想“声明”或“标记”将

b
合并到
a
中,而不实际对分支
a
中的代码进行任何更改。我不介意做一个空的提交来表示合并。动机是分支
b
上发生了多余的工作,自从它们分叉以来,这些工作被包含在
a
上完成的工作中。

假设这是一件“合法”的事情 - 惯用的方法是什么?

git branch git-merge idioms
4个回答
2
投票

我认为它可以很容易地制作成这样:

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

0
投票

没有惯用的方法来做到这一点,因为它不是常见的用例。假设您只是不想拥有未合并的分支,那么有一些解决方法可能适合您,具体取决于您的情况:

  1. 删除分支
  2. 合并分支,然后恢复合并提交(然后合并,但更改不存在)
  3. 恢复分支上的所有提交,然后合并它。

0
投票

我现在是这样做的:

  1. git br a
  2. git merge --no-commit b
    (如果
    git pull --no-commit remote-name-here b
    是远程的,则为
    b
  3. 取消添加所有内容
  4. 编辑提交冲突以仅保留
    a
    版本
  5. git commit
    并更改评论以表示我正在标记为合并而不采用更改。

0
投票

基于

man git merge
,我认为在分支
git merge b -s ours
上执行
a
应该可以解决问题。 请注意,
-s ours
-Xours
不同,后者会调用带有参数
ort
的默认
ours
合并策略。

免责声明:未经测试。

© www.soinside.com 2019 - 2024. All rights reserved.