простая проверка в git?

#git #github

#git #github

Вопрос:

Я экспериментирую с ветвлением в git и сталкиваюсь с кошмаром за кошмаром. В любом случае, текущая проблема заключается в том, что я хотел объединить мастер с веткой. Я попробовал «git rebase», потому что какой-то сайт рекомендовал это, и это привело к ряду разрушительных действий, но определенно НЕ объединило мою магистраль с веткой. На самом деле это все ужасно испортило и создало всевозможные сложные ошибки слияния, и я не могу понять, как просто вернуть мой код туда, где он был раньше.

Мой вопрос двоякий:

1) Как мне заставить git полностью вернуться к точке непосредственно перед перебазированием git? Все, что я пробую, вызывает у меня всевозможные головные боли из-за ошибок слияния. Я не хочу ничего объединять. Я просто хочу взять конкретную ревизию точно такой, какой она была, и сделать это ЗАГОЛОВКОМ.

2) Как только я уберу беспорядок, как мне объединить магистраль в ветку? Как бы то ни было, слияние не должно быть таким уж сложным с точки зрения конфликтов.

Комментарии:

1. Не существует такого понятия, как «магистраль». Есть только ветви. Что именно вы пытаетесь иметь в виду, когда говорите «магистраль»?

2. @meagar — Вы серьезно задаете вопрос или просто подчеркиваете, чем отличается git, или, по крайней мере, соглашение отличается?

3. @manojlds Я серьезно спрашиваю, чтобы получить некоторое представление о заблуждениях OP, чтобы я мог помочь им понять, как это работает на самом деле.

4. Я серьезно задаю вопрос. У меня есть кодовая база, которая, по сути, заблокирована, пока я не придумаю, что делать правильно.

Ответ №1:

  1. Попробуйте git reset --hard удалить изменения (включая конфликты) в рабочем каталоге и сбросить вашу ветку до состояния, предшествующего попытке слияния.

  2. Из ветки, в которую вы хотите объединиться, используйте 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
  

… который восстановит вашу ветку до состояния, в котором она находилась до начала перебазирования.