假设我们有两个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
的树为树(因此与a
没有区别(,该对象具有我在那里提供的注释(随意调整(。对象将被创建,id将被打印在stdout上。你可以检查它以确保它是你想要的:
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
(如果b
是远程的,则为git pull --no-commit remote-name-here b
(- 取消添加所有内容
- 编辑提交冲突以仅保留
a
版本 git commit
,并更改注释以表示我标记为已合并,而不采用更改
没有惯用的方法,因为这不是一个常见的用例。假设你只是不想拥有未合并的分支,根据你的情况,有一些变通方法可能对你有效:
- 删除分支
- 合并分支,然后恢复合并提交(然后进行合并,但不存在更改(
- 还原分支上的所有提交,然后合并它