Как разрешить конфликты в EGit



Я использую EGit наEclipse v4.3 (Kepler). Я хочу зафиксировать и продвинуть свои изменения. Сначала я делаю вытягивание, и один файл конфликтует. После ручного разрешения конфликта (локальный и удаленный теперь одинаковы), я все еще сталкиваюсь с проблемами.



Вот сообщения об ошибках для каждого действия:



Толчок вверх по течению




Мастер: мастер [отклонено-не перемотка вперед]




Тяни




Не удается войти в репозиторий с состоянием: MERGING_RESOLVED




Отметить как объединенный




Не удалось добавить ресурс в индекс не удалось добавить ресурс в индекс исключение, пойманное во время выполнения команды add




Жесткий сброс




Произошла внутренняя ошибка во время: "сброс в refs / heads / master".
Исключение, пойманное во время выполнения команды reset. {0}




Как я могу устранить конфликт и продвинуть свои изменения? Что я делаю не так?

824   8  

8 ответов:

Вы используете команду вид синхронизации? Если так, то это проблема. Разрешение конфликтов в представлении Team Synchronise не работает с EGit. Вместо этого вам нужно использовать представление репозитория Git.

Откройте перспективу Git. В представлении репозитория Git перейдите к разделу ветви on местныйmaster и щелкните правой кнопкой мыши → Merge ...

Он должен автоматически выбрать удаленное отслеживаниеorigin/master. Нажмите КнопкуMerge .

Это должно показать result:conflict.

Откройте конфликтующие файлы. У них должен быть старый sk000l >>>> =====

Теперь в ГИТ промежуточном представлении, он должен показать измененный файл в неиндексированных изменений'. Щелкните правой кнопкой мыши и 'добавить в индекс '

Введите описание изображения здесь

Повторите для всех оставшихся файлов.

Теперь с точки зрения "постановки git", зафиксируйте и нажмите. Как Git / Eclipse теперь знает, что вы слились удаленный источник изменяется на ваш мастер, вы должны избегать ошибки не-быстрой перемотки вперед.

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

  1. щелкните правой кнопкой мыши на проекте и выберите команду Team: Commit....
  2. просмотрите мои изменения, чтобы убедиться, что я не фиксирую какие-либо изменения, которые я сделал случайно или несвязанные изменения, о которых я забыл. Напишите сообщение о фиксации, пока я просматриваю изменения.
  3. я оптимист, поэтому я начинаю с нажатия кнопки Фиксация и нажатие кнопки. Если никто больше не настаивал на каких-либо изменениях, то мне конец. Если кто-то сделал это, то фиксация завершается успешно, и толчок отклоняется.
  4. щелкните правой кнопкой мыши на проекте и выберите команду Team: Pull. Если нет конфликтов, то выберите команду: толчок вверх по течению, и я закончил.
  5. Если есть конфликты, просмотрите проводник пакетов, чтобы увидеть, какие файлы конфликтуют. Щелкните правой кнопкой мыши на каждый конфликтующий файл и выбрать команду: инструмент слияния. Он покажет все изменения в обеих версиях файл, с любыми конфликтами, показанными красным цветом. Нажмите на кнопку, чтобы объединить все неконфликтные изменения, а затем вручную отредактировать все красные разделы. Есть также кнопка для отображения трехстороннего слияния, включающего общий предок.
  6. сохраните изменения в файле. Если вы хотите, вы можете сравнить его с HEAD, чтобы увидеть, какие изменения вы делаете поверх изменений, которые вы только что вытащили.
  7. щелкните правой кнопкой мыши на файле и выберите команду Team: Add to Index, чтобы сообщить EGit, что вы завершили слияние этого файла. Ко мне, это наименее интуитивный шаг, но командная строка git также использует команду add, чтобы показать, что слияние завершено.
  8. повторите для любых других конфликтных файлов.
  9. когда все файлы будут объединены, щелкните правой кнопкой мыши на проекте и выберите команду Team: Rebase: Continue Rebase. Если есть больше конфликтных коммитов, вернитесь к работе с конфликтами.
  10. Когда перебазирование завершено, выполните тесты, чтобы убедиться, что перебазирование ничего не нарушило.
  11. щелкните правой кнопкой мыши на проекте и выберите Команда: толчок вверх по течению.

Это руководство было полезно для меня http://wiki.eclipse.org/EGit/User_Guide#Resolving_a_merge_conflict .

Обновлено Просто заметка об этом о моей процедуре, вот как я действую:

  1. зафиксируйте мое изменение
  2. Fetch (Syncrhonize workspace)
  3. тяни
  4. Управление конфликтами с помощью инструмента слияния (Team - >Merge Tool) и сохранение
  5. Добавить каждый файл в этап (команда - > добавить в индекс)
  6. Теперь сообщение Commit в окне Stage предварительно заполняется "Merged XXX". Вы можете оставить все как есть или изменить сообщение фиксации
  7. фиксация и Push

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

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

(Update: Как отмечалось в комментариях ниже, этот ответ был дан до включения функции "git stash" в eGit.)

То, что я сделал, было:

  1. скопируйте локальную копию конфликтующего файла, которая может иметь или не иметь каких-либо изменений от версии на восходящем потоке.
  2. в Eclipse," вернуть " файл к версии справа до конфликта.
  3. запустите "вытягивание" из удаленного репозитория, позволяя синхронизировать все изменения с локальным рабочим каталогом. Это должно очистить обновления, поступающие в вашу файловую систему, оставив только то, что вам осталось нажать.
  4. Проверьте текущую версию конфликтующего файла в вашем рабочем каталоге с копией, которую вы скопировали. Если есть какие-либо различия, выполните правильное слияние файлов и зафиксируйте эту версию файла в рабочем каталоге.
  5. Теперь " Толкай" ваши изменения.

Надеюсь, это поможет.

Этот подход похож на решение "тайника", но я думаю, что он может быть более ясным:

  1. Ваша текущая локальная ветвь является "master", и у вас есть локальные изменения.
  2. после синхронизации, есть входящие изменения и некоторые файлы должны быть объединены.
  3. Итак, первым шагом является переход к новой локальной ветви (скажем, " my_changes"):
    • команда - > переключиться на - > новая ветвь
      • имя ветви: my_changes (например)
  4. после переключения на новая ветвь, незафиксированные локальные изменения все еще существуют. Итак, зафиксируйте все ваши локальные незафиксированные изменения в новой ветке "my_changes":
  5. переключитесь обратно в локальную ветвь "master" :
    • команда - > переключиться на - > мастер
  6. Теперь, когда вы выбираете Team - > Synchronize Workspace, никаких файлов "слияния"не ожидается.
  7. Выберите Команду - > Тянуть
    • Теперь локальная ветвь" master "обновлена относительно удаленного" master" ветка.
  8. теперь есть два варианта:
    • Вариант 1:
      • Выберите команду - > объединить, чтобы объединить исходные локальные изменения из локальной ветви "my_changes" в локальную ветвь "master".
      • Теперь зафиксируйте входящие изменения с предыдущего шага в локальную ветвь "master" и переместите их в удаленную ветвь "master".
    • Вариант 2:
      • снова переключитесь в локальную ветвь "my_changes".
      • объединить обновления из локальной ветви" master" в ветку "my_changes".
      • перейдите к текущей задаче в ветке "my_changes".
      • Когда задача будет выполнена, используйте опцию 1 выше, чтобы обновить как локальную ветвь" master", так и удаленную.

Чтобы разрешить конфликты, используйте git stash для сохранения незафиксированных изменений; затем потяните вниз набор изменений удаленного хранилища; затем откройте локальный stash, чтобы повторно применить незафиксированные изменения.

В Eclipse v4. 5 (Mars) для сохранения изменений (относительно недавнее добавление, не было в предыдущем EGit) я делаю это: щелкните правой кнопкой мыши на проекте верхнего уровня Eclipse, который находится в Git control, выберите Team, выберите Stashes, выберите Stash Changes; откроется диалоговое окно для запроса фиксации тайника сообщение.

Вы должны использовать контекстное меню в проекте верхнего уровня! Если я щелкну правой кнопкой мыши по каталогу или файлу в проекте, управляемом Git, я не получу соответствующего контекстного меню.

Поскольку это проблема, с которой мы сталкиваемся чаще всего, ниже приведены шаги по ее решению.

  1. Откройте перспективу Git. В представлении репозитория Git перейдите к на ветвяхместныйmaster и щелкните правой кнопкой мыши → Merge ...

  2. Он должен автоматически выбрать удаленного отслеживания → *происхождения/мастер. Нажмите КнопкуMerge .

  3. Запуск stage view в Eclipse.

  4. Дважды щелкните файлы, которые изначально показывали конфликт

  5. В представлении слияние конфликтов, выбрав стрелку влево для всех неконфликтных + конфликтных изменений слева направо, можно разрешить все конфликты.

  6. Сохраните объединенный файл.

  7. Сделайте команду → снова вытащите из затмения.

Все готово :)

Просто щелкните правой кнопкой мыши на конфликтующем файле и добавьте его в индекс после разрешения конфликтов.

Comments

    Ничего не найдено.