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

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

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

fatal: cannot do a partial commit during a merge.

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

13 ответов


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

git commit -i myfile.php

git commit -am 'Conflicts resolved'

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


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

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

  1. этап только конфликтный файл (git add your_file.txt )
  2. git commit -m "your_merge_message"

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


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

git commit "commit message"

должно быть

git commit -m "commit message"

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

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

Ура


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

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

git commit -m "Fixing merge" 

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

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

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

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


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


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


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

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 не в файл, который должен сливать-??

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

git ls-files -m | xargs git add

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


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

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

Tree Conflict Screenshot

почти невозможно исправить используя Xcode, Я заменил .xcodeproj файл с загруженной версией с сервера Git. Результат... проект Xcode, казалось, прояснился, однако все обновления от коррумпированного вытягивания отображались как изменения, которые я сделал, и были поставлены для фиксации.

Look at all these Mods and Added files

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

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

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

это дубликат ответа на дубликат вопроса, как в:Ошибка В Git В Xcode Слияние застряло


Если это Источник Дерева, мы должны явно отметить файл как разрешенный после разрешения конфликтов. Выберите файл это было просто решено никаких конфликтов. Тогда Действия - > Разрешить Конфликты - > Пометить Разрешено. Если у вас несколько файлов, сделайте то же самое для всех. Теперь совершить.