Как вернуться к последнему коммиту в истории после того, как я использовал git reset, чтобы перейти к более старой ревизии? - PullRequest
12 голосов
/ 29 марта 2010

Предположим, моя история такова:

A - B - C - D (мастер)

Если я сделаю git reset B, я получу:

A - B (мастер)

Проблема в том, что git log теперь показывает мне только историю от А до Б, и я больше не вижу С и D.

Как я могу вернуться к D?

Ответы [ 2 ]

22 голосов
/ 29 марта 2010

Вы должны увидеть D с git reflog.

См. Эту статью , например .

Единственное время, когда фактически удаляются коммиты, это если вы нажмете gc --prune (так что будьте осторожны с этим!).

Если вы запустите git reflog прямо сейчас в репозитории, в котором вы работали, вы увидите множество изменений, которые выглядят примерно так:

c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master

Эти строки можно разбить на 4 части:

  • совершить хэш,
  • указатель фиксации,
  • действие,
  • и дополнительная информация.

Если бы мы хотели вернуть утраченный коммит в HEAD@{1}, мы могли бы просто git reset --hard HEAD@{2}.
Теперь наша текущая ветвь (и рабочая копия) установлены в состояние хранилища, прежде чем мы сделали сброс.

Если бы мы просто хотели посмотреть, что это за состояние, мы могли бы git checkout -b temp HEAD@{2} (или git checkout HEAD@{2}, если у вас git 1.5.0 и выше).

0 голосов
/ 29 марта 2010

Хорошо, нашел его.

Вы можете использовать git reflog.

Я не знал, для чего это, но теперь я вижу, что это журнал всех ссылок, на которые указывал HEAD.

...