Есть ли команды, которые я могу вызвать программно, чтобы определить, находится ли мое репозиторий git в состоянии каждого из
В частности, я хочу знать, могу ли я программно выдать git merge --abort
(в случае 1) и git rebase --abort
(в случае 2), чтобы вернуться в заведомо исправное состояние.
MERGE_HEAD
, MERGE_MODE
и MERGE_MSG
существуют в вашей папке .git
.rebase-apply
существует внутри вашей папки .git
. См. этот вопрос и его ответы.stash pop
выполняет слияние, но не совсем. Содержимое папки .git
вроде как обычно. Я не совсем уверен, но поскольку слияние из тайника не может быть прервано (что-то вроде git stash pop --abort
не может быть выполнено, и если вы хотите прервать, вам нужно использовать старый добрый git reset --hard HEAD
), я не думаю, что репозиторий находится в реальное «конфликтное состояние». Все, что у вас есть, - это маркеры конфликтов в конфликтующих файлах.Отредактировал свой ответ, но до сих пор не совсем уверен, нет ли лучшего способа для 3.
В .git
должно быть что-то другое, потому что если я попытаюсь перейти с checkout
в другую ветку, я получу error: you need to resolve your current index first
.
Я предполагаю, что соответствующая информация хранится в .git/index
, но я не знаю, как разобрать этот файл. Вроде бинарный.
checkout HEAD
кажется хорошим способом отличить конфликт stash pop
от отсутствия конфликта.
error: you need to resolve your current index first
Это показано, потому что есть файлы, которые показаны как "оба измененные", то есть содержат маркеры конфликта. Этот ответ показывает, как сбросить файлы, что было бы аналогом «отмены» слияния в 1.
Спасибо, это интересно! Вы согласны с тем, что я использую git checkout HEAD
для обнаружения конфликта stash pop
, или вы знаете способ получше?
git checkout HEAD
информирует вас о конфликтующих файлах, да. Вы можете получить ту же информацию от git status
: он показывает конфликтующие файлы в разделе unmerged paths
. Оба кажутся законными способами проверки конфликтующих файлов.
Спасибо за Ваш ответ. Что касается 3, я только что создал репо с простым конфликтом
stash pop
, и ни один из файловMERGE
на самом деле не существует.