Usando git for-each-ref --format="%(objectname:short) %(refname)"
eu obtenho:
207e698 refs/heads/main
f78d212 refs/original/refs/heads/main
24f61e4 refs/original/refs/tags/Cấutrúc1
4248ddd refs/original/refs/tags/Cấutrúc1.1
207e698 refs/remotes/origin/main
bc5335c refs/tags/Cấutrúc2.0
a03c71f refs/tags/Cấutrúc2.0.1
c72d77c refs/tags/Cấutrúc2.1.0
03f6aa0 refs/tags/Cấutrúc2.2.0
391fcd5 refs/tags/cấutrúc2.3.0
O que refs/original/
faz? Uma resposta em Remove refs/original/heads/master from git repo after filter-branch --tree-filter? diz que:
refs/original/*
está lá como um backup, caso você estrague seu filter-branch. Acredite, é uma ideia muito boa.
Pelo comentário, entendi que não é apenas um backup para filter-branch
, mas uma maneira de desencorajá-lo a usá-lo. Suponho que por "ideia realmente boa" a citação anterior significa que é uma ideia realmente boa não usar filter-branch
. Mas é a única operação que aciona sua criação? E vejo que tem vários subcaminhos: refs/heads
, refs/tags
, heads
. O que eles estão tentando dizer?
Pequeno sermão na frente: Ok, há uma citação famosa que fala sobre apreender a confusão de ideias que poderia produzir tal pergunta que é relevante aqui, se você tivesse explicado o que motivou essa pergunta, teria sido muito mais fácil descobrir o que está motivando isso. É provável que pura sorte algo sobre isso não tenha me cheirado como curiosidade ociosa ou alguma caça mal concebida, então eu fiz algumas pesquisas . Sério: quando você está fazendo várias perguntas motivadas pela mesma situação (e isso não é uma coisa ruim de forma alguma), vincule todas elas e explique a situação.
Você reescreveu um histórico, incluindo um filtro-ramificação, então parece que você fez um rebase ou simplesmente abandonou uma ramificação. Essa sequência produzirá o sintoma que motivou sua outra pergunta que vinculei:
e essa saída de log é confusa. Eu vou tão longe a ponto de chamá-la de um recurso incorreto de
git log
, um que não foi corrigido talvez porque é tão raramente encontrado, tão facilmente superado, e as correções fáceis têm seus próprios problemas.mostra detalhes
git log
que normalmente oculta. Adicionar decorações para referências administrativas pode facilmente se tornar muito irritante, aqui é sensato, necessário até, mas isso está longe de ser sempre o caso; e marcar commits de root com o recurso "marcação de limite de exclusão" tem algumas interações ainda piores com outrasgit log
opções, posso encontrar muita simpatia pela visão que imagino que tenha sido mantida naquele dia: melhor não abrir essa lata de minhocas e apenas mostrar o que está acontecendo quando as pessoas ficarem confusas.Então
refs/original/
o prefixo refgit filter-branch
é usado para lembrar como era o histórico antes de ser reescrito. Se você foi preguiçoso e fez isso em um repositório onde o dano pode ser caro para consertar,git fetch -u . +refs/original/*:*
restaurará cada ref que ele reescreveu para o que era antes do filter-branch, seu histórico volta para onde veio, qualquer árvore de trabalho e alterações de índice desde o filter branch permanecem e você pode fazer o que for certo para você com elas.Reserve um tempo e observe o que está acontecendo aqui, execute os exemplos aqui. O Git não remove o histórico do repositório até que ele fique sem referência por um bom tempo, duas semanas a um mês, dependendo de como exatamente ele foi abandonado, é o padrão de fábrica. O Filter-branch pode fazer grandes mudanças. O
refs/original
ritmo torna o backout fácil no curto prazo e possível até que você decida explicitamente que realmente não precisará dele.git log
As simplificações de exibição padrão do escondem coisas que apenas atrapalhariam, exibi-las com seus recursos existentes seria confuso ou até mesmo propenso a erros. Você atingiu as principais desvantagens de suas heurísticas usuais, sorte sua.