No Git, ramificações são apenas ponteiros (referências) para confirmações em um gráfico acíclico direcionado (DAG) de confirmações. Isso significa que a exclusão de uma ramificação remove apenas referências a confirmações, o que pode tornar algumas confirmações no DAG inacessíveis, invisíveis. Mas todas as confirmações que estavam em uma ramificação excluída ainda estariam no repositório, pelo menos até que as confirmações inacessíveis sejam removidas (por exemplo, usandogit gc
).
Observe que git branch -d
se recusaria a excluir uma ramificação se não tiver certeza de que a exclusão não deixaria confirmações inacessíveis. Você precisa usar o mais fortegit branch -D
para forçar a exclusão de uma ramificação, se ela puder deixar confirmações inacessíveis.
Observe também que confirmações inacessíveis, se estiverem presentes, são apenas aquelas confirmadas entre a última dica de uma ramificação excluída e uma confirmação que foi mesclada com outra ramificação existente, qualquer confirmação marcada ou o ponto de ramificação; o que for mais tarde. Por exemplo, na seguinte situação:
---- O ---- * ---- * ---- / M ---- * <- mestre <- CABEÇA
\ /
\ --. ---- .-- / - x --- y <- ramificação excluída
somente confirma 'x' e 'y' se tornam inacessíveis após a exclusão da ramificação.
Se você operasse em uma ramificação excluída dentro do gc.reflogExpire
período, padrão 90 dias, você teria a última dica de uma ramificação excluída registrada no reflog HEAD (consulte git reflog show HEAD
ou git log --oneline --walk-reflogs HEAD
). Você poderá usar o reflog HEAD para recuperar o ponteiro excluído. Observe também que, nesse caso, confirmações inacessíveis em apenas uma ramificação excluída estariam protegidas contra remoção (remoção) dentro do gc.reflogExpireUnreachable
período, que por padrão é de 30 dias.
Se você não conseguir encontrar a ponta de uma ramificação excluída no reflog para HEAD, tente usar git fsck
a opção "consolidação inacessível <sha1>" e examine-as (via git show <sha1>
ou git log <sha1>
) para encontrar a ponta da ramificação excluída.
Independentemente de como você encontra a ponta de uma ramificação excluída, você pode desfazer a exclusão ou, em vez disso, recriar uma ramificação excluída usando
git branch <deleted-branch> <found-sha1-id>
Observe, no entanto, que o reflog para uma ramificação seria perdido.
Há também o script git-resurrect.sh, no contrib/
qual ajuda a encontrar vestígios de uma dica de ramificação com nome determinado e a ressuscitá-la (cancelar a exclusão).