我们在第二次追加与主人合并期间看到了一个功能分支上的意外冲突。在调查期间,我使用git merge-base期望找到分支之间的最新合并点,但发现更早,我怀疑这会导致我们意想不到的冲突。
问题
分支主人关系的背景故事/历史
答案 0 :(得分:3)
按顺序:
git log --graph --decorate --oneline --boundary master...feature
的输出中。 --graph
显示图表; master...feature
选择任一分支上的所有提交但不选择两者(即删除合并基础); --boundary
放回第一个被删除的提交(即合并基础);并且--decorate --oneline
以更好的查看格式显示图表。上面实际上有两个关键项:图表指示所有,可能有多个合并基础(使用git merge-base --all
查看所有,当有多个时)。在多个基数的情况下,-s recursive
默认合并策略使用所有这些,而-s resolve
合并策略任意选择一个。通常只有一个,所以这没有区别,当 多于一个时,在理想情况下,所有合并基数都会产生相同的结果,因此-s recursive
数量“只是检查”。
从技术上讲,合并基数由DAG(Directed Acyclic Graph)的“最低共同祖先”或LCA定义。 (术语“最低”的出现是因为计算机科学家将树木颠倒过来。)在DAG中,可能存在多个同样低的共同祖先,这就是多个合并基础出现的时候;在Git中,只有在存在“纵横交错合并”时才会发生这种情况:
git checkout main; git merge sub
git checkout sub; git merge main
以便两个分支相互合并。
有关DAG和LCA的更多信息,请参阅this very drafty draft的第2章。