2010-03-29 3 views
11

Пусть моя история идет таким образом:Как вернуться к последнему фиксации в истории после того, как я использовал сброс git, чтобы перейти к более раннему набору изменений?

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

Если я git reset B, я получил:

A - B (мастер)

Trouble is, git log теперь покажу мне только историю от A до B, и я больше не вижу C и D.

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

ответ

20

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

См. Это article for instance.

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

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

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

Эти линии могут быть порваны вниз на 4 части:

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

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

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

+1

Это буквально просто спасло мне жизнь. – Nitroware

0

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

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

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

Смежные вопросы