Как узнать, конфликтует ли мой репозиторий git?

Есть ли команды, которые я могу вызвать программно, чтобы определить, находится ли мое репозиторий git в состоянии каждого из

  1. конфликт слияния
  2. переустановить конфликт
  3. конфликт из-за тайника

В частности, я хочу знать, могу ли я программно выдать git merge --abort (в случае 1) и git rebase --abort (в случае 2), чтобы вернуться в заведомо исправное состояние.

2
0
63
1

Ответы 1

  1. Во время слияния файлы MERGE_HEAD, MERGE_MODE и MERGE_MSG существуют в вашей папке .git.
  2. Во время перезагрузки папка rebase-apply существует внутри вашей папки .git. См. этот вопрос и его ответы.
  3. stash pop выполняет слияние, но не совсем. Содержимое папки .git вроде как обычно. Я не совсем уверен, но поскольку слияние из тайника не может быть прервано (что-то вроде git stash pop --abort не может быть выполнено, и если вы хотите прервать, вам нужно использовать старый добрый git reset --hard HEAD), я не думаю, что репозиторий находится в реальное «конфликтное состояние». Все, что у вас есть, - это маркеры конфликтов в конфликтующих файлах.

Спасибо за Ваш ответ. Что касается 3, я только что создал репо с простым конфликтом stash pop, и ни один из файлов MERGE на самом деле не существует.

Tom Ellis 11.04.2018 13:53

Отредактировал свой ответ, но до сих пор не совсем уверен, нет ли лучшего способа для 3.

kowsky 11.04.2018 14:03

В .git должно быть что-то другое, потому что если я попытаюсь перейти с checkout в другую ветку, я получу error: you need to resolve your current index first.

Tom Ellis 11.04.2018 15:07

Я предполагаю, что соответствующая информация хранится в .git/index, но я не знаю, как разобрать этот файл. Вроде бинарный.

Tom Ellis 11.04.2018 15:10
checkout HEAD кажется хорошим способом отличить конфликт stash pop от отсутствия конфликта.
Tom Ellis 11.04.2018 17:22
error: you need to resolve your current index first Это показано, потому что есть файлы, которые показаны как "оба измененные", то есть содержат маркеры конфликта. Этот ответ показывает, как сбросить файлы, что было бы аналогом «отмены» слияния в 1.
kowsky 16.04.2018 07:21

Спасибо, это интересно! Вы согласны с тем, что я использую git checkout HEAD для обнаружения конфликта stash pop, или вы знаете способ получше?

Tom Ellis 16.04.2018 22:12
git checkout HEAD информирует вас о конфликтующих файлах, да. Вы можете получить ту же информацию от git status: он показывает конфликтующие файлы в разделе unmerged paths. Оба кажутся законными способами проверки конфликтующих файлов.
kowsky 17.04.2018 07:52

Другие вопросы по теме