Восстановление случайно потерянного коммита из-за отсоединенной головы - PullRequest
2 голосов
/ 16 июня 2019

Я потерял свой код после переключения на другую ветку (думал, что я его нажал, но голова была отсоединена)

Я переключился с мастера на источник / somebranch Работал там Затем я должен был быстро что-то исправить в мастере, поэтому я сделал git add -A git commit -m "некоторый коммит" мерзавец мастер проверки git

Я сделал это довольно быстро, поэтому я не прочитал сообщение об отсоединении головы ... Так что в результате, когда я переключился на какую-то ветку, моих изменений не было ... Мои изменения потеряны или есть способ восстановить их?

Ответы [ 2 ]

3 голосов
/ 16 июня 2019

Нет, ваш коммит не потерян, в этот момент на него не будет ссылаться ни одна ветка (и, как таковая, кандидат на сборку мусора), но reflog сохраняет ссылку на него некоторое время (по умолчанию 90 дней, ноВы можете проверить свою конфигурационную запись gc.reflogExpire), чтобы иметь возможность восстановить ее.

Как?Первый возможный метод :

Условие: только если ваш терминал все еще открыт с выводом предыдущих операций.

Если это так, вы сможете легко определить хэш вашегоcommit:

git commit -m "Useful message here"
[master ec470f4] Useful message here
 1 file changed, 1 insertion(+), 1 deletion(-)

Просто воссоздайте ветку в этой точке:

git checkout -b recovered-branch ec470f4

Если по какой-либо причине у вас нет такой возможности (терминал закрыт, сделал clear, пока что, ничего), не беспокойтесь:

Второй метод, reflog

git reflog

перечисляет все предыдущие позиции HEAD, поэтому просто получите хеш коммита, который вам нужен, и используйте ту же команду для воссоздания вашей ветви.

2 голосов
/ 16 июня 2019

Просто проверьте reflof и найдите свой коммит и используйте этот идентификатор для создания новой ветви или перемещения уже существующей ветви

git reflog
git branch -f some-branch the-id-of-the-revision
...