#git #github
#git #github
Вопрос:
Я экспериментирую с ветвлением в git и сталкиваюсь с кошмаром за кошмаром. В любом случае, текущая проблема заключается в том, что я хотел объединить мастер с веткой. Я попробовал «git rebase», потому что какой-то сайт рекомендовал это, и это привело к ряду разрушительных действий, но определенно НЕ объединило мою магистраль с веткой. На самом деле это все ужасно испортило и создало всевозможные сложные ошибки слияния, и я не могу понять, как просто вернуть мой код туда, где он был раньше.
Мой вопрос двоякий:
1) Как мне заставить git полностью вернуться к точке непосредственно перед перебазированием git? Все, что я пробую, вызывает у меня всевозможные головные боли из-за ошибок слияния. Я не хочу ничего объединять. Я просто хочу взять конкретную ревизию точно такой, какой она была, и сделать это ЗАГОЛОВКОМ.
2) Как только я уберу беспорядок, как мне объединить магистраль в ветку? Как бы то ни было, слияние не должно быть таким уж сложным с точки зрения конфликтов.
Комментарии:
1. Не существует такого понятия, как «магистраль». Есть только ветви. Что именно вы пытаетесь иметь в виду, когда говорите «магистраль»?
2. @meagar — Вы серьезно задаете вопрос или просто подчеркиваете, чем отличается git, или, по крайней мере, соглашение отличается?
3. @manojlds Я серьезно спрашиваю, чтобы получить некоторое представление о заблуждениях OP, чтобы я мог помочь им понять, как это работает на самом деле.
4. Я серьезно задаю вопрос. У меня есть кодовая база, которая, по сути, заблокирована, пока я не придумаю, что делать правильно.
Ответ №1:
-
Попробуйте
git reset --hard
удалить изменения (включая конфликты) в рабочем каталоге и сбросить вашу ветку до состояния, предшествующего попытке слияния. -
Из ветки, в которую вы хотите объединиться, используйте
git merge <other branch>
. Если есть конфликты, разрешите их, открыв файлы и объединив строки между<<<<<
и>>>>>
маркерами конфликта, затемgit add <merged file>
. Когда вы вручную разрешите все конфликты,git commit
завершите слияние.
Комментарии:
1. Я сделал: «git reset —hard <SHA>» с хэшем SHA нужной мне ревизии. Я получил «HEAD теперь на fd01dc6». Теперь, когда я делаю «git status», я получаю «Ваша ветка отстает от ‘origin / PersonalSite’ на 10 коммитов и может быть быстро переадресована».. Проблема, конечно, в том, что я не могу нажать, потому что у меня нет быстрой переадресации. Как мне заставить удаленную ветку просто забыть все и позволить мне перейти к удаленному из этого нового места?
2.
git push -f
будет выполняться независимо от состояния удаленной ветви.3. Это сделало это, с дополнительным преимуществом того, что git просто полностью забыл 10 адских коммитов слияния, которые я сделал. Спасибо!
Ответ №2:
Если вы находитесь в процессе перебазирования и обнаруживаете, что не можете устранить возникающие конфликты, вы всегда можете прервать перебазирование с помощью:
git rebase --abort
… который восстановит вашу ветку до состояния, в котором она находилась до начала перебазирования.