Git ошибка при фиксации после слияния - фатальная: не может выполнять частичную фиксацию во время слияния

Я запустил git pull, который закончился конфликтом. Я разрешил конфликт, и теперь все в порядке (я тоже использовал mergetool).

Когда я фиксирую разрешенный файл с помощью git commit file.php -m "message", я получаю сообщение об ошибке:

fatal: cannot do a partial commit during a merge.

У меня была такая же проблема, и использование -a в commit отлично работало. Я думаю, что это не идеальный способ, потому что я не хочу совершать все изменения. Я хочу фиксировать файлы отдельно с отдельными комментариями. Как я могу это сделать? Почему git позволяет пользователям фиксировать файлы отдельно после слияния? Я не мог найти удовлетворительного ответа на эту проблему.

Ответ 1

Я обнаружил, что добавление "-i" к команде commit исправляет эту проблему для меня. -i в основном говорит ему, чтобы выполнить дополнительные файлы перед фиксацией. То есть:

git commit -i myfile.php

Ответ 2

git commit -am 'Conflicts resolved'

Это сработало для меня. Вы также можете попробовать это.

Ответ 3

Вы можете использовать git commit -i для большинства случаев, но если он не работает

Вам нужно сделать git commit -m "your_merge_message". Во время конфликта слияния вы не можете объединить один файл, поэтому вам нужно

  • Показывает только конфликтный файл (git add your_file.txt)
  • git commit -m "your_merge_message"

Ответ 4

Вероятно, вы столкнулись с конфликтом в том, что вы не поставили для фиксации. git не позволит вам совершать вещи независимо (потому что все это часть слияния, я думаю), поэтому вам нужно git add этот файл, а затем git commit -m "Merge conflict resolution". Флаг -i для git commit выполняет добавление для вас.

Ответ 5

Я получил это, когда забыл -m в моем коммите git при разрешении конфликта git слияния.

git commit "commit message"

должен быть

git commit -m "commit message"

Ответ 6

Как говорится в сообщении об ошибке, вы не можете выполнить частичную фиксацию после слияния. Вместо того чтобы совершать только file.php, вы должны зафиксировать все изменения.

Это должно работать.

git commit -m "Fixing merge" 

Ответ 7

Ваше слияние остановилось в середине действия. Вы должны добавить свои файлы, а затем "git commit":

git add file_1.php file_2.php file_3.php git commit

Приветствия

Ответ 8

Если вы просто хотите вырезать все файлы для сбора вишни и фиксации в любых наборах, которые вы хотите,

git reset --soft <ID-OF-THE-LAST-COMMIT>

доставит вас туда.

Что такое soft reset, так это перемещение указателя, указывающего на текущий HEAD, на commit (ish), который вы дали, но не изменяете файлы. Hard reset переместит указатель, а также вернет все файлы в состояние в этом commit (ish). Это означает, что с мягким reset вы можете очистить статус слияния, но сохранить изменения в фактических файлах, а затем зафиксировать или reset их по отдельности по вашему вкусу.

Ответ 9

  1. перейти в каталог вашего проекта
    1. отобразить скрытые файлы (появится папка .git)
    2. открыть папку .git
    3. удалить MERGE_HEAD
    4. совершить снова
    5. если git сказал вам, что git заблокирован, вернитесь в папку .git и удалите index.lock
    6. совершить снова все будет хорошо работать на этот раз.

Ответ 10

Для себя это произошло в SourceTree, когда я попытался выполнить слияние перед тем, как разрешить все файлы. Затем я пометил последний разрешенный файл и все же дал мне эту ошибку при попытке совершить. Я закрыл SourceTree и снова открыл его, а затем он сделал штраф.

Ответ 11

Я решил это с совершенно другим подходом, используя только Xcode Source Control.

Справочная информация. Другая команда. Внесены изменения в удаленный репозиторий Git (через Beanstalk). На моем конце файлы .xcodeproj вошли в другой каталог, и изменений не потребовалось. Позже, когда я попытался зафиксировать, я получил ошибку "Конфликт дерева" в Xcode.

Скриншот сценария дерева

Практически невозможно исправить использование Xcode, я заменил файл .xcodeproj на загруженную версию с сервера Git. В результате... проект Xcode, похоже, прояснился, однако все обновления от коррумпированного Pull появлялись как изменения, которые я сделал, и были поставлены для Commit.

Посмотрите на все эти моды и добавленные файлы

Однако, пытаясь выполнить Commit, я получил ту же ошибку "фатальный: не могу выполнить частичную фиксацию во время слияния", обсуждаемую здесь.

Вот как я решил проблему... (Теперь поймите, что я новичок-программист, поэтому мне не хватало некоторого понимания... но мое невежество заставило меня найти другой способ сделать это.) Во-первых, я Клонировал мой мастер Ветвь во вторичный филиал и переключился на эту ветку. Затем я создал рабочую копию и поместил каталог в эту рабочую копию за пределы исходного каталога проекта. (Я не знаю, было ли это необходимо, но это то, что я сделал, когда читал другие методы устранения неполадок.) Затем я переключил ветки на мастера, где понял, что все мои файлы в Staged (изменения в Commit) исчезли. Чтобы убедиться, что все файлы были обновлены до последних изменений, сделанных другой стороной, я создал новую ветвь с именем ThirdBranch, которая дублировала все файлы, выталкивала ее на сервер Git и позволяла Beanstalk сравнивать мою версию сервера главной ветки к ветке ThirdBrach я просто нажал (строка за строкой), и все изменения другой стороны присутствовали на моем Xcode. Это означало, что мой главный репозиторий и главный репозиторий Git были одинаковыми, что подтверждает, что я решил проблему, используя только Xcode.

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

Это дублированный ответ на дублирующий вопрос: Сбой Xcode Git Слияние застряло

Ответ 12

Во время слияния Git требуется отслеживать родительские ветки по разным причинам. То, что вы хотите сделать, - это не слияние, поскольку видит Git. Вы, скорее всего, захотите сделать переустановку или вишневый подбор вручную.

Ответ 13

git commit -i -m 'merge message' не работал у меня. Он сказал:

fatal: No paths with --include/--only does not make sense.

FWIW, я получил здесь этот связанный вопрос, потому что я получал это сообщение:

fatal: You have not concluded your merge (MERGE_HEAD exists).

Я также попробовал mergetool, который сказал No files need merging. Очень смущает! Таким образом, MERGE_HEAD не находится в файле, который требует слияния -??

Наконец, я использовал этот трюк, чтобы добавить только измененные файлы (не хотел добавлять все файлы в свое дерево, так как у меня есть некоторые, которые я хочу сохранить без следа):

git ls-files -m | xargs git add

Тогда я наконец (!) смог зафиксировать и оттолкнуть. Было бы неплохо, если бы git дал вам лучшие подсказки о том, что делать в этих ситуациях.

Ответ 14

Если он находится в Дереве источников, мы должны явно пометить файл как разрешенный после разрешения конфликтов. Выбрать файл, который был разрешен без конфликтов. Затем Действия → Разрешить конфликты → Отметить решено. Если у вас несколько файлов, сделайте то же самое для всех. Зафиксируйте сейчас.

Ответ 15

После прочтения всех комментариев. это было мое решение:
Мне пришлось "добавить" его снова, чем совершить:

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html

Ответ 16

Если вы используете Исходное дерево или другой графический интерфейс, убедитесь, что все файлы проверены (после слияния).