我正在阅读在制作拉取请求之前在Git中压缩提交的利弊。我没有找到关于的信息是,如果其他拉取请求被合并到主服务器中,当有问题的拉取请求被推迟时,带有压缩提交的拉取请求是否更有可能变成合并冲突。我可以想象不同的场景:
哪一个是真的,还是更复杂的东西? (比如,取决于变化的类型?)
答案 0 :(得分:2)
如果您关注的是运行git merge
,请注意git merge
找到三个提交:
HEAD
; --theirs
/其他/“远程”提交,这是您在运行git merge otherbranch
时命名的提交;和我喜欢称这三个提交 L (对于Left / Local / --ours
), R (对于Right / Remote / --theiRs
);和 B (基地)。
如果你“明智地”挤压(抱歉,这个定义不明确!),这对合并基础发现没有影响。 L 和 B 将是相同的。唯一的影响是 R 将具有不同的哈希ID。无论你是否被压扁, R 的树(已保存的源快照)都是相同的。
git merge
有效地做到了:
git diff --find-renames B L > /tmp/ours.patch
git diff --find-renames B R > /tmp/theirs.patch
然后组合这些补丁,以便将组合集应用于commit B 中的树。由于三棵树将保持不变,挤压对合并没有任何影响。
答案 1 :(得分:0)
我可以想到至少有一个实例,其中一个压扁的提交 less 可能会导致冲突:
假设您的分支中有三个提交,A
和B
,A
是B
的祖先。
使用A
,它会在文件顶部附近更改五行,并在底部附近更改五行。 B
与A
的第一个大块位相反,将文件的该部分更改回A~1
中的内容。
A
+ B
的总变化是文件底部附近的五条更改行。
如果某人更改了文件顶部五行附近的内容,则合并时分支会发生冲突。
如果您将A
和B
合并到新的提交C
中,则不会发生冲突。