В Git ветви - это просто указатели (ссылки) на коммиты в направленном ациклическом графе (DAG) коммитов. Это означает, что удаление ветви удаляет только ссылки на коммиты, что может сделать некоторые коммиты в группе доступности базы данных недоступными, а значит, невидимыми. Но все коммиты, которые были в удаленной ветке, все еще будут в репозитории, по крайней мере до тех пор, пока недостижимые коммиты будут удалены (например, с помощью git gc
).
Обратите внимание, что git branch -d
откажется удалить ветку, если не может быть уверена, что ее удаление не приведет к недоступности коммитов. Вам нужно использовать более сильный git branch -D
, чтобы принудительно удалить ветку, если она может оставить недоступные коммиты.
Обратите также внимание, что недоступные коммиты, если они присутствуют, являются только теми коммитами, которые находятся между последним кончиком удаленной ветви и коммитом, который был объединен с другой существующей веткой, любым теговым коммитом или точкой ветвления; что будет позже. Например, в следующей ситуации:
----O----*----*----/M----* <-- master <-- HEAD
\ /
\--.----.--/--x---y <-- deleted branch
только коммиты 'x' и 'y' станут недоступными после удаления ветки.
Если вы работали с удаленной веткой в течение периода gc.reflogExpire
(по умолчанию 90 дней), последний совет удаленной ветви будет записан в журнале HEAD (см. git reflog show HEAD
или git log --oneline --walk-reflogs HEAD
). Вы должны иметь возможность использовать HEAD reflog для восстановления удаленного указателя. Также обратите внимание, что в этом случае недоступные коммиты только в удаленной ветви будут защищены от сокращения (удаления) в течение периода gc.reflogExpireUnreachable
, который по умолчанию составляет 30 дней.
Если вы не можете найти подсказку только что удаленной ветви в reflog для HEAD, вы можете попытаться использовать git fsck
, чтобы найти «недостижимый коммит », и изучить их (через git show <sha1>
или * 1021). *) найти подсказку удаленной ветки.
Независимо от того, как вы найдете подсказку удаленной ветви, вы можете отменить удаление или, скорее, заново создать только что удаленную ветку, используя
git branch <deleted-branch> <found-sha1-id>
Обратите внимание, что reflog для ветки будет потерян.
В contrib/
также есть сценарий git-resurrect.sh , который помогает находить следы наконечника ветви с заданным именем и воскрешать его (восстанавливать).