Ошибка git при коммите после слияния - фатально: невозможно выполнить частичную фиксацию во время слияния - PullRequest
253 голосов
/ 29 апреля 2011

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

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

fatal: cannot do a partial commit during a merge.

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

Ответы [ 15 ]

404 голосов
/ 09 ноября 2011

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

git commit -i myfile.php
93 голосов
/ 09 января 2014
git commit -am 'Conflicts resolved'

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

28 голосов
/ 07 марта 2013

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

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

  1. Поместить только конфликтующий файл (git add your_file.txt)
  2. git commit -m "your_merge_message"
13 голосов
/ 20 января 2012

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

10 голосов
/ 10 ноября 2015

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

git commit "commit message"

должно быть

git commit -m "commit message"
7 голосов
/ 18 апреля 2016

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

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

git commit -m "Fixing merge" 
6 голосов
/ 13 января 2015

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

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

Cheers

5 голосов
/ 21 августа 2013

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

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

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

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

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

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

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

Tree Conflict Screenshot

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

Look at all these Mods and Added files

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

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

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

Это дублирующий ответ на дублирующий вопрос, как в: Не удалось выполнить слияние с Xcode Git

...