Как восстановить утерянный коммит git из Atlassian Stash?

У нас был коммит, исправляющий проблему в нашей кодовой базе, которая была объединена с помощью запроса на включение. Коммит теперь нигде не найти. Я не знаю, как это было удалено, так как это было давно. Хорошо, что я могу видеть пулл-реквест, хэш коммита и разницу изменений в Stash. Если вся эта информация все еще существует в тайнике, как мне восстановить фиксацию?


person Alexander Suraphel    schedule 21.04.2015    source источник


Ответы (2)


Если вы знаете хэш фиксации, вы можете проверить, существует ли фиксация в вашем локальном репозитории, просто вызвав git show:

git show <commit-id>

Если коммит все еще существует, вы можете создать новую ветку с помощью git branch

git branch save-my-old-commit <commit-id>

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

git fetch origin <commit-id>
git branch save-my-old-commit FETCH_HEAD

Если исходная фиксация возникла из запроса на вытягивание, вы также можете попробовать извлечь из разветвленного репозитория (у меня нет опыта работы со Stash, поэтому я предполагаю, что он работает аналогично GitHub или Gitlab).

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

person helmbert    schedule 21.04.2015

У вас есть несколько вариантов (я перечисляю лишь некоторые из них, есть и другие варианты):

  • Использование git bisect, чтобы узнать, когда (зафиксировать) он был "исчез"
  • Используйте git reflog на машине разработки, чтобы точно увидеть, что и когда было сделано (не было ли репо клонировано после этого момента)
  • заново создайте/переоткройте запрос на извлечение и снова объедините его.

Я рекомендую использовать git bisect, чтобы узнать, когда он исчез.

Как использовать git bisect?

person CodeWizard    schedule 21.04.2015