Git 提交不完整的合并

Git commit incomplete merge

有没有办法提交不完整的合并?我已经解决了一半的冲突。我同事的另一半更适合对付

也许同样好,甚至更好的方法是获取冲突块并将它们恢复到处于冲突状态的文件中。然后我可以提交与冲突块的合并,我的同事可以获取它,return 文件进入 "conflict" 状态,然后从那里获取它。

简短的回答是否定的,这是不可能的。

我一直想编写一个脚本以尽可能接近。在解决冲突期间,索引中每个文件有 个副本,加上工作树中的第四个。 (在 HEAD 中添加不可更改的副本,实际上每个文件有 五个 个活动副本——但我们只需要保存其中的四个,因为 五个 个活动副本=10=] 无法更改。)可以以与 git stash 非常相似的方式保存每一个,这将允许通过通常的 Git 传输 "stashed in-progress merge"机制。1 这将涵盖 大多数 案例。但是,在 部分 解决的合并期间,索引中有一些特殊信息 — "REUC" 撤消条目 — 根本无法保留,并且 all 合并无法记录有关高级冲突(例如 rename/rename 冲突)的一些重要信息,这些信息在执行此操作之前确实应该以某种方式公开。

如果您不需要撤消条目,我没有写的这个脚本可能会起作用,但是唉,我没有写它。 :-) 但是,基本思想是 read/copy 当前(合并冲突)索引到三个或四个无冲突的临时索引副本:每个阶段 1 条目一个,每个阶段 2 条目一个,并且每个 stage-3 条目一个。我们还需要一个用于所有 stage-0 条目,但也许可以在此处使用原始索引。添加最后一个临时索引以保存实际工作树状态 w,其中包含带有冲突标记的文件(如果有人正在使用 [=15=,则可能对未跟踪的文件进行 u 提交]?)。从所有临时索引文件进行提交,以某种有用的方式将它们捆绑在一起并提交 HEAD ,就像 git stash 从其 iw 提交。然后,做 git reset --hard,和 git stash 一样。

要恢复冲突状态,首先确保一切都是干净的,然后将每个提交读入临时索引。使用生成的索引文件构建一个新的冲突索引,并根据需要在第 0、1、2 和 3 阶段添加条目。使用工作树提交从保存合并 w 提交建立工作树状态(实际上可能首先这样做)。


1今天在存储库之间传输 git stash 提交在技术上是可行的,但是 git stash 前端和内部工作机制让它有点棘手。因为,或者至少 a,这个脚本的要点是使传输正在进行的合并变得容易,无论提出什么脚本都需要提供一种机制和一些清晰的执行此操作的说明。