Используйте трехстороннюю разность для различий
Другой ТАК вопрос показывает, как настроить git
использовать трехстороннюю разность для конфликтов слияния.
Можно ли установить этот трехсторонний стиль по умолчанию для стандартной операции сравнения? Если я запрашиваю различия между версиями, где есть общий корень (это не просто одна из версий), изменения в общем корне будут показаны в diff.
1 ответ
Боюсь, ответ - нет.
Обоснованием этого является то, что независимо от того, как вы указываете аргументы при вызове git diff
, он всегда учитывает только две сущности (BLOB-объекты или деревья (большую часть времени выводимые из коммитов, ссылающихся на них)). Другими словами, это по замыслу: git diff
рассматривает отдельные объекты и не делает никакого обхода истории. Процитировать git diff
страница справочника:
Для более полного списка способов написания
<commit>
см. раздел "ОПРЕДЕЛЕНИЕ ПЕРЕСМОТРОВ" вgitrevisions(7)
, Однако "diff" означает сравнение двух конечных точек, а не диапазонов, и обозначений диапазонов ("<commit>..<commit>
" а также "<commit>...<commit>
") не означает диапазон, определенный в разделе" УКАЗАНИЕ ДИАПАЗОНОВ "вgitrevisions(7)
,
С другой стороны, с подходящей оболочкой вы сможете сделать это самостоятельно. Скажем, учитывая два коммита, rev1
а также rev2
Вы могли бы использовать
git-diff3() {
local rev1="$1" rev2="$2"
diff3 <(git show "$rev1") \
<(git show $(git merge-base "$rev1" "$rev2")) \
<(git show "$rev2")
}
в оболочке, которая понимает <(...)
(например bash
).
Эта функция требует массажа, чтобы сделать ее более полезной / менее хрупкой, но я надеюсь, что вы поняли идею.