#git #merge #merge-conflict-resolution
#git #слияние #слияние-разрешение конфликтов
Вопрос:
Я пытаюсь объединить master с моей веткой, но есть некоторые конфликты. Я удаляю конфликтующие файлы в своей ветке и пытаюсь объединить снова, но он говорит «Уже обновлен».
Файлы, которые я хочу объединить в главной ветке, все еще там. Те файлы, которые я хочу объединить с моей веткой, не отображаются, но фиксация и слияние продолжают говорить «Уже обновлены».
Пожалуйста, помогите и объясните ситуацию, поскольку я новичок в git.
Ответ №1:
Удаление этих файлов в вашей ветке, вероятно, было ошибкой. У вас был конфликт содержимого (я изменил строку 123 с «foo» на «bar», а они изменили строку 123 с «foo» на «omg») на конфликт существования (они меняют строку 123 с «foo» на «omg», и я говорю: удалите весь файл).
Однако странно, что вы получаете «Уже обновлено». при слиянии сейчас. Кажется, вы не все сказали о том, что вы там сделали. Вы получите «Уже обновлено». только когда считается, что основная ветка уже полностью объединена с вашей веткой.Судя по тому, что вы говорите, вы, должно быть, удалили файлы, а затем зафиксировали это изменение (удаление файла) в качестве разрешения конфликта. Если вы это сделали, то история выглядит так:
перед:
changeA - changeB - changeC[yourwork] --- (merge conflict)
/ /
some common /
state /
changeX - changeY - changeZ[master]
после:
changeA - changeB - changeC ---- (merge deletefiles)[yourwork]
/ /
some common /
state /
changeX - changeY - changeZ[master]
В этом состоянии попытка объединить мастер ничего не дает, потому что он уже был объединен, следовательно, сообщение «Уже обновлено». Кроме того, в yourwork
ветке файлы отсутствуют, поскольку вы их удалили. И на главном они все еще присутствуют, поскольку master
нет фиксации, которая удаляет эти файлы.
Забавный факт: если вы сейчас объедините свою ветку с master, файлы также исчезнут из master.
Вероятно, лучшим способом решить эту проблему было бы отменить фиксацию слияния (т. Е. reset
Вашу ветку changeC
и повторить слияние; или revert
merge deletefiles
фиксацию и повторить слияние).
В любом случае, когда вы повторите слияние, вы снова получите тот же конфликт, что и раньше. На этот раз вы должны resolve
разрешить конфликты: сообщите git, какую версию файлов вы хотите сохранить (вместо того, чтобы сообщать git, что вам вообще не нужны эти файлы).