У меня было несколько отдельных веток, и я хотел их объединить, поскольку каждая из них была обновлением другой части программа.
Думаю, я должен был их объединить, но вместо этого я выполнил git commit -a
после проверки каждой ветки.
Затем я понял, что вся программа вернулась в прошлое, поэтому я запустил git reset --soft HEAD
(я где-то читал в статье, что это должно помочь), но это ничего не дало. .
Я также получил это сообщение от git об удалении вручную некоторых ./ git / index.lock
, поэтому я переместил его в ./ git / backup_of_index.lock
, но это не так. похоже, я тоже ничего не делаю.
Как исправить мой репозиторий и объединить все ветки?
Если вы не взломали данные в каталоге .git
, маловероятно, что вы ничего не потерял. У вас может быть ужасный беспорядок, который нужно убрать, и может потребоваться много времени, чтобы разобраться, что вы сделали и где оно находится, но вы, вероятно, ничего не потеряли.
Это хорошие новости.
Плохая новость в том, что кому-то будет чертовски сложно вам сильно помочь.
Скорее всего, вам нужно будет идентифицировать все ветки и отследить в обратном направлении коммиты по каждой. Вам нужно решить, были ли все эти операции « git commit -a
» хорошей идеей.Это звучит маловероятно, поэтому вам может потребоваться правильно выполнить слияние, работая от предпоследнего коммита в каждой ветке.
Вы также должны решить, что вы действительно пытались сделать.
Похоже, вы хотели объединить некоторое количество ветвей - назовите их BranchA, BranchB и BranchC - с основной веткой, master. Но не совсем понятно, что вы пробовали.
Учитывая, что здесь что-то не так, я рекомендую создать еще одну ветку, которую мы можем назвать «Исправление». Создайте это из головы основной ветки. Затем объедините соответствующие версии каждого из BranchA, BranchB и BranchC в ветку Fixup. На каждом этапе проверяйте, что код действительно работает правильно - прохождение его набора тестов и т. Д. Проверяйте каждое слияние отдельно в ветке Fixup.
Когда вы убедитесь, что ветвь Fixup верна, переключитесь обратно на главную ветвь и объедините ветвь Fixup с главной.
Чарльз Бейли делает очень разумное предложение (в комментарии к вопросу): прежде чем делать что-либо еще, сделайте резервную копию того, что у вас есть, точно в том виде, в каком она есть сейчас. Только после этого приступайте к очистке. И его предложение получить интерактивную помощь тоже разумно.
Одна из замечательных особенностей Git заключается в том, что вы можете легко скопируйте весь ваш рабочий репозиторий . Это позволяет вам сохранить резервную копию, пока вы экспериментируете с ветвлением и слиянием.
Предлагаемый мной подход для решения вашей текущей проблемы:
Кроме того, Я надеюсь, что вы используете gitk (или аналогичный) для просмотра эффектов ваших изменений - это действительно может помочь вам визуализировать различные строки кода и их взаимосвязь.
gitk --all ## show me all the branches
Самая важная команда git в этой ситуации — git reflog
. Журнал ссылок отслеживает все изменения в каждой конкретной главе ветки, а команда git reflog
перечисляет все изменения в голове ветки в прошлом.
Если вы можете определить «хороший» идентификатор коммита с помощью reflog (и он будет где-то там), то вы далеко впереди того, что есть сейчас. Если хороший идентификатор фиксации, скажем, abc123
, тогда команда:
git checkout -b rescue abc123
создает новую ветку с именем rescue
с идентификатором фиксации abc123
.
Когда я изучал git, у меня возникал похожий вопрос: «Где я, черт возьми, и как я сюда попал?» момент. Я узнал о журнале ссылок из другого вопроса о переполнении стека, и это было самое ценное, что я знал о Git.
Ошибки:
Вы не должны игра с незнакомой территорией, когда ваш код что-то значит. Если вы хотите это сделать, по крайней мере, имейте запасной план.
Аварийное восстановление кажется важным только для тех, кто в нем больше всего нуждается, но в этот момент уже слишком поздно.
Я сторонник экспериментов, но мне неприятно видеть такие ситуации. Мне жаль разработчика, так как я слишком хорошо знаю его обувь, однако, однажды выучив эту ошибку, вы никогда ее не забудете.
Прежде чем вы решите поиграть, возьмите свой код и бросьте его в другое место, чтобы, когда дерьмо поразило поклонника, вы могли вернуться в свою зону комфорта и продолжить работать как счастливый разработчик и вернуться к игре после того, как вы получите свою работу. Выполнено.