Я побежал, git pull
что закончилось конфликтом. Я решил конфликт, и теперь все в порядке (я также использовал mergetool).
Когда я фиксирую разрешенный файл с, git commit file.php -m "message"
я получаю сообщение об ошибке:
fatal: cannot do a partial commit during a merge.
У меня была та же проблема раньше, и использование -a
в коммите работало отлично. Я думаю, что это не идеальный способ, потому что я не хочу совершать все изменения. Я хочу зафиксировать файлы отдельно с отдельными комментариями. Как я могу это сделать? Почему git не позволяет пользователям фиксировать файлы отдельно после слияния? Я не смог найти удовлетворительного ответа на эту проблему.
Ответы:
Я обнаружил, что добавление "-i" к команде фиксации решает эту проблему для меня. -I в основном говорит, что нужно подготовить дополнительные файлы перед фиксацией. То есть:
источник
Stage additional files
значит?git add
, что приводит кgit commit
неудаче. Добавление-i
скажет git добавить и зафиксировать одновременно. Я до сих пор не уверен, почему, но это, кажется, имеет смысл.Это сработало для меня. Вы можете попробовать это тоже.
источник
Вы можете использовать
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
делает надстройку для вас.источник
commit -i
сработало, но нетgit add; git commit
Я получил это, когда забыл
-m
в git commit при разрешении конфликта git merge.должно быть
источник
Как говорится в сообщении об ошибке, вы не можете выполнить частичную фиксацию после слияния. Вместо того, чтобы просто
file.php
совершить, вы должны зафиксировать все изменения.Это должно работать.
источник
Ваше слияние остановилось в середине действия. Вы должны добавить свои файлы, а затем «git commit»:
git add file_1.php file_2.php file_3.php git commit
ура
источник
Если вы просто хотите отбросить весь сбор вишни и зафиксировать файлы в любых наборах, которые вы хотите,
доставит вас туда.
То, что делает программный сброс, - это перемещает указатель, указывающий на текущий HEAD, на коммит (ish), который вы дали, но не изменяет файлы. Hard reset переместит указатель и вернет все файлы в состояние в этом коммите (ish). Это означает, что с помощью мягкого сброса вы можете очистить статус слияния, но сохранить изменения в реальных файлах, а затем зафиксировать или сбросить их по отдельности по своему вкусу.
источник
источник
Для меня это произошло в SourceTree, когда я попытался выполнить слияние перед разрешением всех файлов. Затем я отметил, что последний файл разрешен, и все же он выдал мне эту ошибку при попытке зафиксировать. Я закрыл SourceTree и снова открыл его, а затем он совершил нормально.
источник
Я решил это с совершенно другим подходом, используя только Source Control Xcode.
Справочная информация: Другая команда отправила изменения в удаленный репозиторий Git (через Beanstalk). С моей стороны, файлы .xcodeproj пришли в другой каталог, и изменения не были приняты. Позже, когда я попытался зафиксировать, я получил ошибку Tree Conflict в Xcode.
Поскольку почти невозможно исправить с помощью Xcode, я заменил
.xcodeproj
файл загруженной версией с сервера Git. В результате ... проект XCode, казалось, прояснился, однако все обновления от поврежденного Pull показывались как внесенные мной изменения и были подготовлены для коммита.Однако при попытке выполнить коммит я получил ту же ошибку «роковая: невозможно выполнить частичную фиксацию во время слияния», обсуждаемую здесь.
Вот как я решил эту проблему ... (Теперь поймите, что я новичок, поэтому мне не хватает понимания ... но мое невежество привело меня к поиску другого способа сделать это.) Сначала я клонировал своего хозяина. Филиал во вторичный филиал и переключился на этот филиал. Затем я создал рабочую копию и поместил каталог в эту рабочую копию за пределами исходного каталога проекта. (Я не знаю, было ли это необходимо, но это то, что я сделал, когда читал другие методы устранения неполадок.) Затем я переключил ветки на мастер, где я понял, что все мои Staged-файлы (изменения в Commit) пропали. Чтобы убедиться, что все файлы были обновлены до последних изменений, внесенных другой стороной, я создал новую ветвь с именем ThirdBranch, которая дублировала все файлы, Выдвинул его на Git-сервер и позволил Beanstalk сравнить мою версию главного сервера для сервера с веткой ThirdBrach, которую я только что нажал (строка за строкой), и все изменения другой стороны присутствовали в моем Xcode. Это означало, что мой главный репозиторий и главный репозиторий Git были одинаковыми, что подтверждает, что я решил проблему только с помощью Xcode.
Не спрашивайте меня, как, помимо того, что я только что описал ... и, конечно, заполнить пробелы, которые я пропустил. Я новичок в этом и не все понимаю. Может быть, опытный программист может отделить не относящуюся к делу информацию от релевантной и воссоздать эту технику более четко, отчасти поэтому я публикую это.
Это повторяющийся ответ на дубликат вопроса по адресу: Неудачный Xcode Git Merge застрял
источник
Во время слияния 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 дал вам лучшие советы о том, что делать в таких ситуациях.
источник
Если он находится в дереве исходного кода , мы должны явно пометить файл как разрешенный после разрешения конфликтов. Выберите файл, который был только что разрешен без конфликтов. Затем Действия -> Разрешить конфликты -> Отметить решено . Если у вас есть несколько файлов, сделайте то же самое для всех. Сделай сейчас.
источник
После прочтения всех комментариев. это было мое решение:
мне пришлось «добавить» его снова, чем совершить:
источник
Если вы используете Исходное дерево или другой графический интерфейс, убедитесь, что все файлы проверены (после слияния).
источник
Иногда во время слияния возникают конфликты и возникают дельты, требующие ручного разрешения. В таком случае исправьте ручное разрешение для указанных файлов.
Теперь, если вы выпускаете,
Вы увидите вывод как
Так как вы уже поставили коммит, вам нужно просто выпустить
И ваш коммит будет выполнен без каких-либо проблем.
источник