Em nosso repositório GitHub, um colega de trabalho removeu um ramo chamado release
. Mas quando executo git checkout release
localmente, sempre obtenho a ramificação removida release
. Mesmo, mesmo quando fiz check-out de outro ramo, excluí o release
ramo git branch -D release
e executei novamente git checkout release
.
Existe algo para corrigir no repositório GitHub ou devo corrigir algo localmente?
git branch --remote
produzido após a execuçãogit fetch
? Pode ser necessário removergit fetch -p
para esquecer as ramificações remotas excluídas.git branch --remote
saídaorigin/release
. Você deseja executargit fetch -p
sem argumentos adicionais e removerá todas as ramificações remotas excluídas?git fetch -p
sem argumentos adicionais, podará todas as ramificações remotas excluídas.Respostas:
Depois de excluir uma ramificação no lado remoto, você ainda poderá ver localmente essa ramificação remota anteriormente buscada, consulte:
Você removeu apenas o "lançamento", mas não o "controle remoto / origem / lançamento". Exclua-o assim:
Ou remova todos os ramos buscados que não existem mais no lado remoto:
fonte
git branch -rd origin/release
, o que-r
significa? Será que-d
significa o mesmo que-D
? Podegit branch -rd origin/release
ser substituído porgit branch -d remotes/origin/release
?List or delete (if used with -d) the remote-tracking branches.
; -D:Shortcut for --delete --force.
git branch -rd origin/release
ser substituído porgit branch -d remotes/origin/release
?-r
se refere a filiais remotas , é necessário. As ramificações local e remota são armazenadas em diferentes diretórios, comparels -l .git/refs/heads
els -l .git/refs/remotes
. Você também pode ter um ramo local chamadoremotes/origin/release
que seria excluído sem-r
. Pode parecer confuso, mas você pode apenas brincar, criar ramos com nomes estranhos e ver como fica.git/
.Quando as ramificações são excluídas remotamente, você precisa remover seu repositório local - a maneira mais fácil de fazer isso é com
Isso atualizará seu repositório local com todas as alterações feitas no repositório remoto, mas sem atualizar nenhuma de suas ramificações locais. Depois de executar isso,
não mostrará mais a ramificação remota excluída.
Os repositórios git estão completos, seja no seu próprio sistema ou no servidor. Portanto, quando você clona um repositório pela primeira vez, você obtém uma cópia completa e seu git local “conhece” todas as ramificações remotas, bem como suas ramificações locais. Essas informações não são sincronizadas automaticamente; portanto, quando seu colega excluiu a
release
ramificação no servidor, seu repositório git local não perdeu a noção derelease
ramificação remota . A sincronização comgit fetch
atualiza todas as informações locais nas filiais remotas para que correspondam ao estado no servidor (a rigor, repositório remoto, onde quer que esteja), mas sem excluir nenhuma informação local nas filiais remotas. A remoção comgit fetch -p
(ougit fetch --prune
, ougit remote prune
) remove as informações locais nas ramificações remotas que foram excluídas.fonte
-p
(--prune
) força isso.release
ramo porgit branch -D release
diantegit checkout release
makegit checkout release
parar de receber orelease
ramo?git checkout release
recriará automaticamente uma ramificação se houver uma ramificação remota com esse nome.git branch -D release
já excluiu arelease
ramificação no meu repositório local; Se for o caso, um colega de trabalho excluiu arelease
ramificação no GitHub; Então, ainda não sei por que "recriará automaticamente uma ramificação se houver uma ramificação remota com esse nome"?Tim: O Git é VCS distribuído, portanto, quando você clona um repositório do remoto para o local, ele clona tudo (histórico). Então, quando você clonou seu repositório, ele tinha um ramo chamado release. Desde que seu colega excluiu a ramificação da versão remotamente, até que você faça uma remoção
git fetch -p
ou exclua essa ramificação explicitamente, seu local terá essa ramificação.fonte
Talvez um pouco tangencial, mas a perspectiva deste site pode ajudar a entender o tópico geral de exclusão de ramificações:
http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/
Há sobreposição com parte do que já foi discutido aqui, mas o foco está na limpeza: excluir filiais, remotas e locais, que não são mais necessárias em um ambiente colaborativo. Em particular, o
git branch --merged
comando identifica ramificações que podem ser excluídas com segurança devido à mesclagem com sua linha principal (ou com qualquer ramificação de sua preferência). Se você estiver colaborando, alguns mini scripts mais sofisticados como este apresentarão as coisas em um formato agradável e digerível com datas e autores.(Infelizmente, "agradável, digerível" não se aplica à formatação dos próprios scripts.)
fonte