Это то, что случилось:
У меня есть ветка A. На ветке AI совершено кучу изменений. Я не был доволен кодом, поэтому я проверил предыдущий коммит в ветке А. Затем я внес еще несколько изменений и зафиксировал их в ветке А. Теперь я нигде не могу найти этот коммит. Я потерял этот код?
git reset
а неgit checkout
?HEAD
а ветвь A осталась бы на предыдущем коммите. Какие именно команды вы выполняли?Ответы:
Старый коммит все еще находится в reflog.
Это покажет список коммитов, и «потерянный» коммит должен быть там. Вы можете превратить его в новую ветку. Например, если SHA-1 - ba5a739, то вы можете создать новую ветку с именем "new-branch" при старой фиксации с помощью:
Обратите внимание, что «потерянные» коммиты будут удалены при удалении базы данных.
источник
git cherry-pick [SHA]
для перемещения коммита в существующую ветку, если вы случайно зафиксировали его, находясь в отдельном состоянииprune
, удалит ли также также отдельные коммиты, на которые ссылаются в сообщениях коммитов? Или это делает их достижимыми ?Ваши коммиты все еще доступны в reflog, как уже отмечалось. В дополнение к другим ответам, вот способ перенести отключенные коммиты HEAD непосредственно в вашу текущую ветку , не создавая и не объединяя новую ветку:
Посмотрите хэши SHA-1 коммитов, которые вы сделали в отдельном состоянии HEAD
Затем выполните все упорядоченные хэши, начиная с самых старых и заканчивая самыми последними:
Например, если у меня был только один, заданный в формате коротких хэшей «первые 7 символов»:
Это создаст новые коммиты в вашей текущей ветке, по одному коммиту на хэш detached-HEAD-commit, который вы упомянули в команде. Он также принимает исходные сообщения коммита.
источник
Вы можете найти потерянные (висячие) коммиты с помощью следующей команды:
Обратите внимание, что если ваша текущая голова висящая коммит, она не будет указана как потерянная.
Вы можете найти больше информации на странице руководства git-fsck (1)
Затем вы можете создать ветку для этого потерянного коммита:
источник
Git, говоря о состоянии вашего рабочего каталога, - это « отдельная ГОЛОВА ». Вот еще одно место, которое
git reflog
спасает.Если я пытаюсь оформить заказ на другую ветку, git-1.7.5.1 дает полезное предложение.
источник
Вы не потеряли его, Git по-прежнему хранит копию (но в настоящее время она недоступна для любого руководителя филиала). Вы можете найти свой отсутствующий коммит, используя
git reflog
команду. Reflog отслеживает исторические позиции главы ветви, и вы можете использовать его, чтобы найти вещи, на которые ранее указывал глава ветви.источник
Выполните следующие шаги, чтобы связать свою отстраненную голову обратно в git repo
git checkout "your branch with path but without remote name"
например, если удаленное имя является источником, а имя ветви
bugfix/somebranch
используетсяgit checkout bugfix/somebranch
git reflog
получите список SHA для фиксации из списка коммитов отдельной ветки.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
ВСЕ ГОТОВО!!
источник
В Sourcetree я обнаружил, что git reflog не работает, поэтому я выяснил, как это сделать с помощью графического интерфейса.
Сначала попробуйте найти «потерянный» коммит, отыскивая сообщение в истории команд (см .: Показать вывод команды). Надеемся, что он будет в команде «Switching Branch» после потерянного вами коммита, и вы увидите комментарий коммита с идентификатором коммита 1234567.
Возьмите этот идентификатор фиксации для следующего шага.
Нажмите кнопку «Ветвь» на верхней панели инструментов, и вы получите диалоговое окно «Новая ветвь», в котором вы можете указать определенный коммит. Поместите этот коммит ID туда, укажите новое имя ветки, нажмите Create Branch, и вы должны получить новую ветку с вашим потерянным коммитом!
Это вернуло мне потерянную работу!
источник