Pergunta

Vindo do svn, apenas começando a se familiarizar com o git.

Quando um ramo é eliminada no git, ele é removido da história?

No svn, você pode facilmente se recuperar de um ramo, revertendo a operação delete (integração inversa).Como todos os exclui no svn, o ramo nunca é realmente excluído, é simplesmente removida da árvore atual.

Se o ramo é realmente excluído da história no git, o que acontece com as alterações que foram incorporadas a partir de que ramo?Eles são mantidos?

Foi útil?

Solução

Ramos são apenas apontadores para compromete-se em git.Cada commit no git possui uma completa árvore de código fonte, ele é uma estrutura muito diferente do svn, onde todos os ramos e etiquetas (por convenção) ao vivo em separado "pastas" do repositório juntamente com o especial 'tronco'.

Se o branch foi incorporada em outro ramo antes era excluído, em seguida, todos os compromete-se ainda estará acessível a partir de outro ramo quando o primeiro ramo é excluído.Eles permanecem exatamente como eles foram.

Se o ramo é excluído sem ser mesclados em um outro ramo, em seguida, a compromete-se nesse ramo (até o ponto onde a bifurcação a partir de uma confirmação de que ainda é acessível) deixará de ser visível.

A compromete-se ainda serão mantidas no repositório, e é possível recuperá-los imediatamente após a exclusão, mas, eventualmente, eles vão ser coletado pelo coletor de lixo.

Outras dicas

No Git, ramos são apenas apontadores (referências) para compromete-se em um dirigido gráfico acíclico (DAG) de commits.Isso significa que a eliminação de um ramo remove apenas referências para compromete-se, o que pode tornar alguns compromete-se a DAG inacessível, portanto, invisível.Mas todos reconhecem que estavam excluídos do ramo ainda estaria no repositório, pelo menos até inacessível compromete-se obter podadas (e.g.usando git gc).

Note que git branch -d se recusam a eliminar um ramo se não puder ser a certeza de que a exclusão de que ele não iria deixar compromete-se inacessível.Você precisa usar o mais forte git branch -D para forçar a exclusão de um ramo se pode deixar compromete-se inacessível.

Observe também que, inacessível compromete-se, se estiverem presentes, são apenas aqueles compromete-se entre a última dica de um excluído do ramo e de uma consolidação que tem mesclado para outro ramal existente, qualquer tagged cometer, ou o ponto de ramificação;o que for mais tarde.Por exemplo, na seguinte situação:

----O----*----*----/M----*    <-- master <-- HEAD
     \            /
      \--.----.--/--x---y     <-- deleted branch

só compromete-se 'x' e 'y' iria se tornar inacessível depois de eliminar o ramo.

Se você operado em um excluído sucursal no gc.reflogExpire período, padrão de 90 dias, você teria a última dica de um excluído do ramo gravado na CABEÇA reflog (ver git reflog show HEAD, ou git log --oneline --walk-reflogs HEAD).Você deve ser capaz de usar a CABEÇA reflog para recuperar o que foi excluído do ponteiro.Note também que, neste caso, inacessível compromete-se em apenas um excluído do ramo estaria protegida da poda (remover) dentro do gc.reflogExpireUnreachable período, que por padrão é de 30 dias.

Se você não pode encontrar a ponta de uma eliminado do ramo em reflog para a CABEÇA, você pode tentar usar git fsck para encontrar o "inatingível cometer <sha1>"e examinar aqueles (via git show <sha1> ou git log <sha1>) para encontrar a ponta dos excluídos do ramo.

Independente de como você encontrar a ponta de um excluído do ramo, você pode desfazer exclusão, ou melhor, re-criar um excluiu ramo usando

git branch <deleted-branch> <found-sha1-id>

Note no entanto que reflog para um ramo seria perdido.


Há também git-resurrect.sh script em contrib/ o que ajuda a encontrar vestígios de um ramo com ponta de determinado nome, e ressuscitar (undelete) - la.

Se você está preocupado com galhos excluídos acidentalmente e não possui mais uma cópia local do seu repositório, há extensões para servidores Git Enterprise, como Gerrit, que detectarão reescritas de histórico e as exclusões de ramificação, apoiarão -os sob um referência especial para que eles pode ser restaurado, se necessário, e não será podado pela coleta de lixo. Os administradores da Gerrit ainda podem remover compromissos selecionados, se necessário, por motivos legais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top