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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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