Я уже целый день пытаюсь сделать простое слияние между функцией и разработкой.
В основном все, что я хочу, — это иметь возможность вручную объединять все конфликты функций с разработкой, чтобы я мог получить новую функцию, не разрушая разработку.
Вот что я пробовал до сих пор
git checkout develop; git merge feature
git checkout feature; git merge -s ours develop
git checkout feature; git merge -s recursive -X ours develop
git checkout develop; git merge -s recursive -X theirs feature
git checkout develop; git merge -s recursive -X theirs feature
git checkout feature; git merge -s resolve develop
Во всех этих случаях одна ветвь почти полностью переопределяет другую. У меня нет возможности вручную объединять конфликты внутри файлов.
git checkout feature; git rebase develop
Для некоторых файлов вызывается mergetool, но различия в одном файле не распознаются. Следует отметить, что этот файл был ранее объединен в разработку некоторое время назад. Файлы, которые были удалены при разработке, все еще присутствуют в функции, но с расширением «orig». Это самое близкое, что я когда-либо делал для синхронизации обеих ветвей, но ценой того, что я не могу легко найти, где эта функция больше разветвляется.
git checkout develop; git rebase feature
дает кучу вариантов удалить или сохранить файлы, а затем приводит к ошибке: file not found Continue merging other unresolved paths (y/n) ? y
Я еще не пробовал собирать вишни или осиротеть деревья. Возможно, решение кроется там?
Возможно ли, что я удалил некоторые файлы и создал их заново, и поэтому git даже не пытается объединить ветки?
Нужно ли мне выполнять слияние вручную каждый раз, когда я добавляю новую функцию? Кажется сложным сделать Git — как вызвать конфликт слияния и слияние вручную для выбранного файла
Я знаю, что где-то накосячил, но не могу понять, где и что я делаю не так. Я мог бы просто вручную отредактировать все файлы, которые не были изменены, но это лишило бы смысла использование git.
Где я ошибся? Как разрешить эту ситуацию (без ручного редактирования файлов)? И что мне делать по-другому в следующий раз?
P.S. Команды git reflog feature-name
и git reset --hard feature-name@{n}
бесценны для тех, кто плохо знаком с git и сталкивается с похожими проблемами при изучении использования преобразующих функций, таких как слияние и перебазирование. (всегда используйте --hard с особой осторожностью, так как он отбрасывает локальные изменения)
РЕДАКТИРОВАТЬ: Хотя я до сих пор не знаю, почему это произошло, VonC предложил хорошее временное решение.
Всем, кому интересно, как вы переходите из локальной ветки в новую локальную папку, посмотрите этот пост: https://stackoverflow.com/a/16493707/6419701
Я провел слияние с помощью превосходного инструмента объединения для Ubuntu с использованием синтаксис: meld folder1 folder2