Failed Xcode Git Слияние застряло

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

Это экраны, которые я получаю. showing the files with source control status

The window when i try to commit

The error message

Что я могу сделать? Проект отлично работает, за исключением того, что в главном меню игры не отображаются изображения, на которые он должен был работать, и те, над которыми он работал, и файлы классов, над которыми он работал, кроме нескольких других.

Ответ 1

У Xcode есть проблемы с файлами xcuserdata, и мне пришлось отменить изменения и повторно подтвердить

Ответ 2

Это обычная расстраивающая ситуация:

  • Откройте терминал
  • Перейдите в папку репозитория проекта (тот, который содержит скрытый файл .git)
  • Перемещаем голову слияния, набрав mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCK

Ваша проблема должна быть решена наполовину, в некоторых случаях вам нужно сделать отрыв от организатора:

  1. Откройте Организатор - Хранилища "Файл > исходный контроль > репозитории..."
  2. Найдите репозиторий вашего проекта и оттяните его отсюда.

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

Примечание. Рассмотрим удаление .DS_Stores из репозитория Git

Ответ 3

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

Я никогда не разрешал конфликт в Xcode. Вы всегда можете разрешить конфликт из приложения Terminal. Как только вы подключитесь к терминалу и предположите, что вы установили инструменты командной строки Xcode, выполните следующие действия:

git mergetool
git commit

Это будет/должно появиться окно FileMerge, которое позволит вам выбрать его или его редактирование. Другой вариант, который у вас есть на Терминале, - это разрешить конфликты, просто приняв его изменения. Это сломает ваш код, но вы можете вернуться и исправить его. Для этого попробуйте:

git status
git checkout --theirs -- /path/to/a/conflicted/file ...
git add -- /path/to/a/conflicted/file ...
git commit

Затем отредактируйте файлы, чтобы исправить свои функциональные возможности. После того, как все конфликты будут разрешены, вы сможете совершить возврат в Xcode.

Ответ 4

Откройте терминал и используйте следующее:

Чтобы определить, какие файлы имеют конфликты: git status

Выполнять слияние и исправление конфликтов git mergetool

Вам может потребоваться добавить некоторые невоспроизводимые файлы: git add .

Наконец, совершите изменения git commit

Ответ 5

Когда у меня возникают проблемы с XCode, я просто возвращаюсь к AppCode (пробная версия, если вам нужно), и делаю фиксацию из папки проекта верхнего уровня.

AppCode обнаруживает сценарий слияния и сортирует проблему с частичным Merge. Аналогично, если AppCode не может его отсортировать, я использую Github Desktop. Только если все это не удается, я вернусь к командам низкого уровня.

Ответ 6

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

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

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

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

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

Ответ 7

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

enter image description here

enter image description here