Нет ничего встроенного в Git, чтобы сделать это.
Вы можете обработать некоторые случаи, используя git read-tree
для объединения в индекс, без разрешения каких-либо конфликтующих изменений.Но обратите внимание, что даже git read-tree
3-way merge в некоторых случаях просто выберет одну из двух версий конечной точки какого-либо файла: если базовая версия слияния (дерево # 1 вставлено в слот # 1)в индексе) какого-либо файла F соответствует одному из двух других (промежуточные слоты 2 или 3), а не соответствует версии F в другие из двух промежуточных слотов, git read-tree
свернет три версии до одного слота нулевой стадии, взяв измененный файл.
Другими словами, учитывая ваш пример с двумяразличное содержимое для truth.txt
, нам сначала нужно знать: что говорит базовая версия слияния? Если базовая версия слияния truth.txt
точно совпадает с одной из двух версий tip-tip, то все Операции слияния Git просто автоматически примут другую версию.Только когда все три будут различаться, Git оставит все три в индексе, чтобы вы могли достичь желаемого результата с помощью некоторых встроенных помощников Git.
Если это не соответствует вашим желаниям, выЗастрял в создании собственных программ для работы с различными деревьями.Обратите внимание, что вы можете создать свой собственный временный индекс и использовать git read-tree
для его заполнения, а затем использовать git ls-files --stage
для любого количества временных файлов индекса, которые вы использовали, плюс, конечно, реальный файл индекса для сравнения сущностей.Это дает вам быстрый способ определить, является ли truth.txt
одинаковым или разным в любых двух деревьях, считываемых в любые два индексных файла.
(Конечно, вы можете делать все это без использования каких-либо внутренних компонентов Git:просто проверьте коммиты в отдельных рабочих деревьях и сравните файлы рабочих деревьев.)