Quando você corre, git branch -r
por que os incêndios são listados origin/HEAD
? Por exemplo, há um repositório remoto no GitHub, digamos, com dois ramos: mestre e recurso impressionante. Se eu fizer git clone
isso, pegue no meu novo diretório e liste os ramos, vejo o seguinte:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
Ou em qualquer ordem em que esteja (alfa? Estou fingindo este exemplo para manter em segredo a identidade de um repo inocente). Então, qual é o problema HEAD
? É o que a última pessoa a push
teve sua HEAD
pontas em quando empurrado? Isso não será sempre o que quer que eles sejam push
? HEAD
s se movimentam ... por que eu me importo com o que alguém HEAD
apontou em outra máquina?
Eu só estou entendendo o rastreamento remoto e tal, então essa é uma confusão persistente. Obrigado!
EDIT: Eu tive a impressão de que repositórios remotos dedicados (como o GitHub, onde ninguém trabalha com ssh e trabalha nesse código, mas apenas puxa ou empurra, etc.) não tinham e não deveriam ter um HEAD, porque havia, basicamente, nenhuma cópia de trabalho. Não tão?
fonte
Respostas:
@robinst está correto.
No git, você pode selecionar qual ramificação é retirada por padrão (ou seja, quando você clona). Por padrão,
origin/HEAD
apontará para isso.No GitHub, você pode alterar isso nas configurações de administrador do seu repositório do GitHub. Você também pode fazer isso na linha de comando, via
ou exclua-o completamente via
Exemplo . Veja o menu suspenso "Alternar ramos".
trunk
está marcado, aorigin/HEAD
seguirtrunk
.fonte
origin
eotherremote/HEAD -> master
estava me incomodando. Executar seu comando corrigiu isso para mim.A razão pela qual um repositório simples pode ter um HEAD é porque ele determina qual ramificação é inicialmente retirada após um clone do repositório.
Normalmente, o HEAD aponta para mestre, e esse é o ramo que é retirado quando as pessoas clonam o repositório. Configurá-lo para outra ramificação (editando HEAD no repositório vazio) resulta no check-out dessa ramificação no clone.
fonte
origin/HEAD
uma referência local está correta? Removê-lo tem algum efeitoorigin
?origin/master
não afeta o controle remoto.Eu tive exatamente a mesma impressão como você disse.
E eu nem consigo excluir esse ramo de rastreamento remoto de origem / HEAD clonado no github fazendo
Isso não teve efeito.
Alguém pode me dizer como posso excluir essa ramificação de rastreamento remoto de origem / HEAD?
atualizar
Embora eu não tenha descoberto por que existe uma origem / HEAD criada ao clonar no github, acho uma maneira de excluí-lo.
A nova versão do git fornece
para excluir o ponteiro inútil HEAD da ramificação de rastreamento remoto.
E também podemos alterar o nome padrão idiota 'origem' para o que quisermos usando
Espero que isso possa ajudar. :)
fonte
git remote set-head origin -d
Você está certo de que o envio para repositórios remotos dedicados funciona muito melhor quando estão "vazios", ou seja, quando eles não têm diretórios de trabalho. A arquitetura do Git é projetada para atualização por patches ou
pull
(fetch
), o que faz sentido em um VCS distribuído. Como os documentos dizem em algum lugar, enviar para uma ramificação que está com check-out atualmente pode resultar em "resultados inesperados" .O HEAD faz parte dos requisitos para um repositório válido. O Layout do Repositório Git diz, em parte:
Então você verá HEAD como parte da lista de ramificações, mesmo que "isso não signifique muito ..."
fonte
mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "[email protected]"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
output true. Também não há cópia de trabalho do arquivo enviado no repositório foobar sobre esses comandos.mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "[email protected]"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
output true. Também não há cópia de trabalho do arquivo enviado no repositório foobar sobre esses comandos.Se "origin" for um repositório remoto, origin / HEAD identifica a ramificação padrão nesse repositório remoto.
Exemplo:
Observe a linha que diz "HEAD branch: master". É aqui que o repositório remoto permite que os clientes saibam qual filial efetuar check-out por padrão.
fonte
Sempre há um HEAD que aponta para a ramificação com check-out atualmente no repositório remoto (que pode ou não ser mestre). Mesmo repositórios remotos têm ramificações atuais. Geralmente é mestre, e de cabeça para baixo não consigo pensar em nenhuma razão para alguém querer mudar isso, mas pode ser mudado.
fonte
Meu palpite é que alguém empurrou um galho e chamou HEAD:
fonte