Ответ 1
Я обнаружил, что добавление "-i" к команде commit исправляет эту проблему для меня. -i в основном говорит ему, чтобы выполнить дополнительные файлы перед фиксацией. То есть:
git commit -i myfile.php
Я запустил git pull
, который закончился конфликтом. Я разрешил конфликт, и теперь все в порядке (я тоже использовал mergetool).
Когда я фиксирую разрешенный файл с помощью git commit file.php -m "message"
, я получаю сообщение об ошибке:
fatal: cannot do a partial commit during a merge.
У меня была такая же проблема, и использование -a
в commit отлично работало. Я думаю, что это не идеальный способ, потому что я не хочу совершать все изменения. Я хочу фиксировать файлы отдельно с отдельными комментариями. Как я могу это сделать? Почему git позволяет пользователям фиксировать файлы отдельно после слияния? Я не мог найти удовлетворительного ответа на эту проблему.
Я обнаружил, что добавление "-i" к команде commit исправляет эту проблему для меня. -i в основном говорит ему, чтобы выполнить дополнительные файлы перед фиксацией. То есть:
git commit -i myfile.php
git commit -am 'Conflicts resolved'
Это сработало для меня. Вы также можете попробовать это.
Вы можете использовать git commit -i
для большинства случаев, но если он не работает
Вам нужно сделать git commit -m "your_merge_message"
. Во время конфликта слияния вы не можете объединить один файл, поэтому вам нужно
git add your_file.txt
)git commit -m "your_merge_message"
Вероятно, вы столкнулись с конфликтом в том, что вы не поставили для фиксации. git не позволит вам совершать вещи независимо (потому что все это часть слияния, я думаю), поэтому вам нужно git add
этот файл, а затем git commit -m "Merge conflict resolution"
. Флаг -i
для git commit
выполняет добавление для вас.
Я получил это, когда забыл -m
в моем коммите git при разрешении конфликта git слияния.
git commit "commit message"
должен быть
git commit -m "commit message"
Как говорится в сообщении об ошибке, вы не можете выполнить частичную фиксацию после слияния. Вместо того чтобы совершать только file.php
, вы должны зафиксировать все изменения.
Это должно работать.
git commit -m "Fixing merge"
Ваше слияние остановилось в середине действия. Вы должны добавить свои файлы, а затем "git commit":
git add file_1.php file_2.php file_3.php
git commit
Приветствия
Если вы просто хотите вырезать все файлы для сбора вишни и фиксации в любых наборах, которые вы хотите,
git reset --soft <ID-OF-THE-LAST-COMMIT>
доставит вас туда.
Что такое soft reset, так это перемещение указателя, указывающего на текущий HEAD, на commit (ish), который вы дали, но не изменяете файлы. Hard reset переместит указатель, а также вернет все файлы в состояние в этом commit (ish). Это означает, что с мягким reset вы можете очистить статус слияния, но сохранить изменения в фактических файлах, а затем зафиксировать или reset их по отдельности по вашему вкусу.
Для себя это произошло в SourceTree, когда я попытался выполнить слияние перед тем, как разрешить все файлы. Затем я пометил последний разрешенный файл и все же дал мне эту ошибку при попытке совершить. Я закрыл SourceTree и снова открыл его, а затем он сделал штраф.
Я решил это с совершенно другим подходом, используя только 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 Слияние застряло
Во время слияния Git требуется отслеживать родительские ветки по разным причинам. То, что вы хотите сделать, - это не слияние, поскольку видит Git. Вы, скорее всего, захотите сделать переустановку или вишневый подбор вручную.
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 дал вам лучшие подсказки о том, что делать в этих ситуациях.
Если он находится в Дереве источников, мы должны явно пометить файл как разрешенный после разрешения конфликтов. Выбрать файл, который был разрешен без конфликтов. Затем Действия → Разрешить конфликты → Отметить решено. Если у вас несколько файлов, сделайте то же самое для всех. Зафиксируйте сейчас.
После прочтения всех комментариев. это было мое решение:
Мне пришлось "добавить" его снова, чем совершить:
$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html
Если вы используете Исходное дерево или другой графический интерфейс, убедитесь, что все файлы проверены (после слияния).