Как обнаружить конфликт слияния в рабочем дереве Git-репозитория (не голый) - PullRequest
1 голос
/ 10 мая 2019

Существует ли простая команда git, которая может сказать (например, по состоянию выхода), есть ли у рабочего дерева незавершенные пути / конфликт слияния? Например, когда происходит сбой операции git merge и git возвращается в оболочку, а состояние git показывает, что существуют конфликты слияния.

На данный момент я нашел git status и список значений, которые он будет выводить в незапутанной ситуации (тогда коды состояния XY):

X          Y     Meaning
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified
-------------------------------------------------

Таким образом, единственный способ обнаружить это для меня пока состоит в сопоставлении со списком кодов XY, которые представляют unmerged , например ::

AA | DD | [ADU]U | U[AD]

(добавлен горизонтальный пробел для удобства чтения)

Проверка с нулевым статусом выхода в случае неотключенных путей (или ненулевым, если его нет) будет (если мое понимание статуса git здесь верно):

git status --porcelain -z \
  | grep -q -z '^\(AA\|DD\|[ADU]U\|U[AD]\) '

Это становится довольно запутанным, и я ищу более простую команду (лучше всего с git).

Я хочу использовать его в bash-скрипте для локальной сборки, которая отклоняет дальнейшую обработку, если в рабочем дереве git-репозиториев есть какие-либо незакрытые пути.

1 Ответ

1 голос
/ 10 мая 2019

Здесь уже есть ответ на этот вопрос: https://stackoverflow.com/a/501461/1150795.

Укажите флаг --no-commit во время слияния следующим образом:

git merge --no-commit --no-ff $BRANCH

Затем изучите поэтапные изменения:

git diff --cached

Чтобы отменить слияние, введите:

git merge --abort

В качестве альтернативы вы можете сравнить вашу локальную ветку с удаленной веткой, если это ваш случай:

git fetch origin/master
git diff master origin/master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...