Подтвердить что ты не робот

Git потерянные коммиты

Я пытался исправить проблему в git и случайно использовал git reset --hard для некоторого предыдущего коммита. Так что теперь я не могу вернуться к старой голове.

Однако я сделал клонирование хранилища, прежде чем я это сделал, и поэтому я переместил недостающие коммиты обратно к оригиналу. Это, похоже, работало вчера, но сегодня я вижу, что оригинал все еще застрял на старой фиксации, а новые, похоже, не существуют. Повторное нажатие новых коммитов из клона не работает, так как git сообщает мне, что все в актуальном состоянии.

Как это исправить?

4b9b3361

Ответ 1

Чтобы вернуть HEAD в нужное место:

  • git reflog, чтобы получить список того, где HEAD был в последнее время.
  • git show sha1, чтобы найти место, в котором вы хотите, чтобы ваш HEAD был.
  • После того, как вы найдете требуемый коммит, git merge, чтобы вернуть своего хозяина в нужное место.

Некоторое объяснение: в объявлении git нет ничего, указывающего на то, что один совершит тот, который случился после него. Когда вы reset HEAD, вы указали его на более старую фиксацию. Ваша предыдущая голова теперь болтается, и ничего не указывает на нее.

Мы используем reflog, чтобы увидеть, где находится HEAD. После того, как он будет установлен обратно туда, где вы хотите, вы указываете мастер или другую ветку назад на это место, и все хорошо!

Ответ 2

Я сделал это немного по-другому. Я сделал...

git reflog
3bd79d2 [email protected]{2}: checkout: moving from edbfb06528c43586a0e0e10a73051e06980b9281 to master
edbfb06 [email protected]{3}: commit: added general comments for rubric
f8ca172 [email protected]{4}: checkout: moving from 904d63bf08f6f6b1494bfa473b158b9509b18423 to 
904d63b [email protected]{10}: commit: updated results page and csv
933f2a6 [email protected]{11}: commit: updates
f56e6cd [email protected]{12}: clone: from [email protected]:xxxx.git

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

git cherry-pick edbfb06

Ответ 3

Вам не нужно ничего выводить из другого репо после git reset --hard.

git reflog должен позволить вам найти потерянные коммиты (которые на самом деле не найдены, но все еще там в вашем репозитории Git по умолчанию до 90 дней: см. git config gc.reflogexpire. Вы даже можете убедитесь, что он никогда не истекает, если вы действительно этого хотите).
См. Например Отмена git reset --hard HEAD~1 или restore - git reset --hard HEAD^ в качестве примеров.

Ответ 4

Попробуйте ввести git fetch, чтобы получить обновленный репозиторий