Рассмотрим следующий журнал git со следующими коммитами
6752364 * Merge branch 'java-branch'
|\
b9e9e66 | * Add an unrelated file
14a7cb9 | * Change favorite language to Java
7b07a43 * | Change favorite language to C#
|/
8788146 * C++ is my favorite programming language
Вы можете клонировать репозиторий, который я сделал в качестве примера для этого вопроса.
Моя цель — проверить, какое разрешение конфликта слияния было выполнено в коммите слияния 6752364. Например, я сделал это слияние, поэтому я знаю, что мне было предложено разрешить конфликт в файле readme.md
, который я сделал с помощью Meld. Я выбрал версию Java вместо версии С#. Я не вижу, чтобы это решение было записано где-либо в коммите слияния (не так, чтобы его можно было легко проверить, по крайней мере, подробнее об этом позже). Все, что я могу проверить, это конечное состояние файла.
Есть несколько ответов в StackOverflow относительно этой проблемы просто говорят, что я должен использовать git show
для проверки того, какое разрешение было выполнено. Однако мой git show
дает мне этот вывод:
commit 6752364571d0e9c89ddbb3bd287af2e26eb23e59 (HEAD -> master, origin/master)
Merge: 7b07a43 b9e9e66
Author: Henrique Jung <[email protected]>
Date: Sun Oct 4 21:18:54 2020 +0200
Merge branch 'java-branch'
Я предполагаю, что git show
полезен только в том случае, если я решил конфликт, не используя родительский коммит, а скорее третью версию, недоступную ни для одного из них (например, при написании Haskell на Meld). Как я могу проверить фиксацию слияния, в которой разрешение конфликта выполняется с использованием одной из версий, то есть напрямую выбирая родителя A или родителя B? Где записано, что я предпочитаю Java C#?
Моя версия git 2.25.1.
Возможно, вы думаете: ну, я могу просто посмотреть коммит на GitHub или, может быть, gitg, который показывает мне разницу. Но есть одна загвоздка: он показывает все различия. Он показывает несвязанный файл, который никогда не был частью разрешения конфликта. Таким образом, я мог бы проверить разрешение, но для больших слияний это добавило бы много шума, я бы снова просмотрел обе ветки.
Этот вопрос возник, когда я просматривал большое слияние с большим количеством разрешений конфликтов, и все ответы, связанные с git show
, оказались не такими, как я хотел. Единственный способ надежно проверить, в каких файлах конфликты разрешены вручную, — это повторить слияние локально. Очевидно, должен быть лучший способ.
git show -m
, чтобы получить diff для каждого из двух родителей слияния. (И/или см. ответ jthill.) - person torek   schedule 05.10.2020