如何在不采用git分支中的更改的情况下将其声明为已合并



假设我们有两个git分支,ab(假设它们都是本地的以保持简单(。分支a是我的,分支b不是;我不能碰它。

我想";声明";或";标记";ba的合并,而不实际对分支a中的代码进行任何更改。我不介意做一个空的提交来表示合并。其动机是在分支b上发生了冗余工作,这被a上所做的工作所包含,因为它们发生了分歧。

假设这是一个";合法的";要做的事——做这件事的惯用方法是什么?

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

git commit-tree -p a -p b -m "not pulling b changes" a^{tree}

这样,您就要求git创建一个新的修订对象,该对象以ab为父对象,以a的树为树(因此与a没有区别(,该对象具有我在那里提供的注释(随意调整(。对象将被创建,id将被打印在stdout上。你可以检查它以确保它是你想要的:

git diff that-id a
git log that-id
gitk that-id

不应该有任何区别。如果你喜欢的话,你可以移动一个:

git branch -f a that-id

以下是我现在的操作方法:

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

没有惯用的方法,因为这不是一个常见的用例。假设你只是不想拥有未合并的分支,根据你的情况,有一些变通方法可能对你有效:

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

相关内容

最新更新