Git обычно не позволяет вам удалить ветку, на которой вы находитесь, просто по такой причине.
Наиболее фундаментальная проблема здесь заключается в том, что имя ветви содержало идентификатор хеша коммита. То есть, согласно вашему комментарию, вы сделали это:
git checkout feature/branch_1
, которое помещает имя feature/branch_1
в специальное имя HEAD
. Само имя, то есть feature/branch_1
, содержало 40-символьный хэш-идентификатор подсказки ветви, так что name запоминало фактический хеш коммита.
Тогда ты побежал:
git branch -d feature/branch_1
Git должен был просто сказать нет, вы можете этого не делать . (Были некоторые ошибки, связанные с этим при использовании git worktree add
, и есть различные способы вызвать проблемы, но само по себе git branch
это предполагается , чтобы просто сказать нет здесь.) Когда это удалось, вы осталось:
HEAD
содержит feature/branch_1
- но
feature/branch_1
не существует.
Способ исправить это - воссоздать имя feature/branch_1
, указав в нем правильный хэш-идентификатор коммита. Проблема заключается в том, что в памяти нет хэша фиксации, который он должен хранить: этот хэш-идентификатор хранился под именем feature/branch_1
и больше не является
.
Тогда вам нужен какой-то альтернативный метод для поиска этого хеш-идентификатора. Одним из способов является то, что если есть другое имя, которое также хранит правильный хэш-идентификатор, вы можете прочитать хэш-идентификатор из этого другого имени:
git branch feature/branch_1 origin/feature/branch_1
например. Однако, если такого имени нет, это не сработает.
К счастью, HEAD
имеет reflog , а в HEAD
reflog хранятся необработанные хеши коммитов коммитов, которые вы посетили. К сожалению, в этом состоянии Git отказывается его использовать:
$ git reflog HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
и
$ git rev-parse HEAD@{0}
HEAD@{0}
fatal: ambiguous argument 'HEAD@{0}': unknown revision or path not in the working tree.
Однако, это делает трюк:
$ tail -1 .git/logs/HEAD | awk '{print $2}'
b5101f929789889c2e536d915698f58d5c5c6b7a
так что вы можете прибегнуть к этому конкретному трюку в данном конкретном случае (который в любом случае никогда не должен происходить).