Пожалуйста, у меня в проекте большая проблема: вот сценарий. У меня есть проект xcode под GIT. Сегодня я понял, что последний коммит сломал некоторые тесты, поэтому я проверил предыдущий коммит. Я использовал SourceTree, и это предупреждение
Это сделает вашу рабочую копию отдельной HEAD, что означает, что вы больше не будете в ветке. Если вы захотите выполнить фиксацию после этого, вы, вероятно, захотите либо снова проверить ветку, либо создать новую ветку. Это нормально?
Я работал целый день и в итоге все сделал. Мне нужно было объединить мою работу над веткой разработки, поэтому я проверяю ветку разработки и ... моя работа мгновенно исчезла :(
Я знаю, что было неправильно отсоединять мою ГОЛОВУ, и Sourcetree предупредил меня ... но есть ли способ восстановить мою работу?
Ответы:
Если вы напечатаете
git reflog
, он покажет вам историю того, на какие измененияHEAD
указали. Ваша оторванная голова должна быть там. Как только вы его найдете, выполнитеgit checkout -b my-new-branch abc123
илиgit branch my-new-branch abc123
(гдеabc123
SHA-1 отделенной HEAD), чтобы создать новую ветку, которая указывает на вашу отделенную голову. Теперь вы можете объединить эту ветку на досуге.Как правило, если вы проверяете ветку после работы с отдельной головкой, Git должен сообщить вам фиксацию из отсоединенной головы, в которой вы были, чтобы вы могли восстановить ее, если вам нужно. Я никогда не использовал SourceTree, поэтому не знаю, передает ли он это сообщение. Но если он действительно отобразил это сообщение, вы сможете использовать его для поиска фиксации и снова использовать
git checkout -b
илиgit branch
для создания ветки из этой фиксации.источник
fatal: A branch named 'mybranch' already exists.
Как добавить в существующую ветку?git cherry-pick e5b2f7b
, гдеe5b2f7b
находится SHA-1 фиксации.В Sourcetree это можно сделать с помощью графического интерфейса.
Сначала найдите «потерянную» фиксацию, посмотрев сообщение в истории команд (вид: Показать выходные данные команды). Вероятно, он будет в команде "Switching Branch" после потерянного коммита. Надеюсь, в этом сообщении вы увидите комментарий фиксации с идентификатором фиксации 1234567.
Используйте этот идентификатор фиксации для следующего шага.
Нажмите кнопку «Ветвь» на верхней панели инструментов, и вы должны получить диалоговое окно «Новая ветвь», в котором вы можете указать конкретную фиксацию. Поместите этот идентификатор фиксации туда, укажите новое имя ветки, нажмите «Создать ветку», и вы должны получить новую ветку с потерянной фиксацией!
источник
Если вы не хотите сохранять изменения отключенной HEAD и хотите перейти к последней фиксации ветки, используйте команду ниже напрямую.
Примечание: я удалю все ваши изменения в отключенной HEAD.
источник
У моего коллеги была такая ситуация. В его случае были коммиты в отдельной голове - они работают в R-Studio - и инструмент предупреждал их, что они могут создать ветку с той и той ссылкой на SHA ... но поскольку единственным вариантом было "Закрыть" --ду !! это было информационное окно - они закрыли диалог и потеряли информацию навсегда ...
Благодаря
reflog
команде мы увидели, что изменения не пропали. Но в нашем случаеgit branch
это не сработало, как ожидалось ... или входящийgit pull
как-то испортил его. Нам пришлось выловить изменения из рефлога во вновь созданную ветку:который поместил все нужные нам коммиты в ветку. Тогда мы могли бы
develop
без проблем объединить ветку .На всякий случай, если это для кого-то информативно, мы идентифицировали коммиты на отдельной голове. в
reflog
файле, посмотрев на те, которые находятся между помеченными «checkout» (которые определяют смещение ветки):Те, кого мы хотели, были
HEAD@{8}
вHEAD@{6}
(оба включительно). Итак, мы получили их:Затем обычное решение слияния и финальная фиксация оставили нам ветку lost_changes, в которой размещалась отдельная работа, которую мы считали потерянной. На этот раз слияние этого с разработкой было ускоренным.
источник
Я попробовал этот сценарий и обнаружил, что git сообщает мне SHA-1 последней фиксации:
Вы видели это сообщение?
источник
git reflog
должен показать вам, что вам нужно.Отдельная голова - это нормально, если вы не хотите вносить никаких изменений.
Если вы хотите отменить фиксацию, вы можете использовать git revert в определенной ветке
Если вы хотите работать с отдельной головой и делать коммиты; создать новую ветку (а затем объединить ее);
источник
git reflog
чтобы посмотреть историю.git checkout -b temp e35d2b3
здесь e35dd23 - хеш-значение вашего коммита.Примите это как ответ, если он решит вашу проблему. В противном случае поделитесь своим комментарием.
источник