Получение информации о сдавленных коммитах в Git

Я выкалываю некоторые коммиты в Git с помощью git rebase -i origin/master, как указано в ReinH.com.

После раздавливания некоторых коммитов, есть ли способ увидеть исходные коммиты? Можно ли получить "diff" от коммитов? Могу ли я получить SHA?

Если это возможно, возможно, это возможно после запуска git gc?

Ответ 1

Смысл сжатия коммитов состоит в том, чтобы переписать историю, заменив оригинальные коммиты одним коммитом.

Тем не менее, трудно сделать вещи на самом деле исчезают в Git. Самый простой способ получить эти коммиты будет через git reflog. Попробуйте git reflog <branch> для предыдущих позиций ветки, которую вы перебазировали.

Вы должны быть в состоянии найти SHA1 кончика ветки непосредственно перед вашей интерактивной перебазировкой. (Если ветвь больше не существует, попробуйте git reflog show чтобы увидеть reflog HEAD. Она также должна быть там, просто больше других действий для сортировки.)

Когда у вас есть SHA1, вы - золотой - используйте git log -p или gitk для просмотра git log -p и просмотра их различий. (Если вы хотите много с этим сделать, создайте там ветку, чтобы вам не приходилось вставлять SHA1 снова и снова.)

Это все еще будет возможно после запуска git gc, если только вы не подавили эти коммиты. gc только обрезает недоступные висячие объекты в течение определенного возраста.

Коммиты считаются достижимыми, если они достижимы из чего-либо в повторных журналах, и срок их действия истекает через 90 дней, так что вы обычно можете рассчитывать на эти оригинальные коммиты, торчащие в течение трех месяцев.