Como fechar um Branch Git?

112

então estou começando usando Git + GitHub.

Em nossa equipe pouco distribuída, cada membro está criando sua própria filial para cada questão / requisito que lhes é atribuído.

  1. git branch Issue#1 <-- create this branch
  2. git checkout issue#1 <-- switch over to this branch

agora code code, commit, code, commit, etc ...

em seguida pull request, code-fixup, commit, code, commit.. etc.

e FINALMENTE ... a solicitação pull é aceita.

Woot.

mas .. e agora? (......estranho......)

A pessoa que criou o branch em sua máquina de desenvolvimento local precisa ... fechar o branch? Uma sugestão foi para o dev person deletar o branch `(... -D ...) e então fazer um pull / refresh do master .. que então irá obter todo o código do branch.

Hmmmmm ... não tenho certeza - por favor me ajude :)

Pure.Krome
fonte
16
Um branch no Git é apenas um rótulo em um commit específico - então basicamente, se você não precisa mais dele - apenas delete aquele "branch" (aquele "rótulo" naquele commit). Localmente, basta fazer um git branch Issue#1 -de pronto - nenhum código é perdido, apenas um rótulo é removido do seu repositório
marc_s
1
@marc_s, sugiro apenas dar uma resposta :)
KingCrunch
Então, @marc_s - você está dizendo que a prática padrão uma vez que você finalizou seu branch .. e o branch foi empurrado .. nós o apagamos? E a fusão?
Pure.Krome
@ Pure.Krome Pelo menos presumi que por "solicitação de pull é aceita" você quer dizer que já está mesclado. Sim, é claro, integre as alterações em master, developou qualquer que seja o nome do seu branch de desenvolvimento (Merge, Rebase (com / sem squash), ...)
KingCrunch
quando eu disse 'solicitação de pull é aceita' ... isso acontece em outro lugar. (ou seja, o desenvolvedor responsável que aprova todo o código que é PR ...). Eu queria saber se eu deveria mudar para master na MINHA máquina de desenvolvimento local e fazer uma fusão também.
Pure.Krome

Respostas:

181

Solicitamos que o desenvolvedor solicite o estado da solicitação pull que gostaria que o branch excluído. Na maioria das vezes, é esse o caso. Há momentos em que um branch é necessário (por exemplo, copiar as alterações para outro branch de lançamento).

Meus dedos memorizaram nosso processo:

git checkout <feature-branch>
git pull
git checkout <release-branch>
git pull
git merge --no-ff <feature-branch>
git push
git tag -a branch-<feature-branch> -m "Merge <feature-branch> into <release-branch>"
git push --tags
git branch -d <feature-branch>
git push origin :<feature-branch>

Uma filial é para trabalhar. Uma tag marca um lugar no tempo. Ao marcar cada fusão de ramificação, podemos ressuscitar uma ramificação, se necessário. As tags de ramificação foram usadas várias vezes para revisar as alterações.

Bill Door
fonte
8
Fizemos uma alteração recente em nosso procedimento. Usar git push --tagsé pesado e baixa todas as tags. Isso torna difícil ter suas próprias tags locais. Em vez disso, usamos git push origin branch-<feature-branch>para enviar apenas uma tag.
Bill Door
Portanto, na última linha, você precisa se lembrar de usar o nome da tag para o branch do recurso, que definimos anteriormente como "branch- <feature-branch>", em vez de apenas <feature-branch>. Corrigir?
Premier Bromanov de
@PremierBromanov a última linha é para exclusões de ramificação remota. Para lembrar a tag que @BillDoor usou git push --tags.
Divida de
Excelente script !!
Kike Gamboa
41

Sim, apenas exclua o branch executando git push origin :branchname. Para corrigir um novo problema mais tarde, ramifique do master novamente.

Gaurav Gupta
fonte
3
Isso excluirá o branch remoto, não o local.
KingCrunch
5
Não sei por que isso foi modificado em -2, essa é a resposta correta. Eles definitivamente têm uma filial remota, de que outra forma eles poderiam emitir um PR contra ela?
Ana Betts
Se você fizer isso e, em seguida, executar um git pull, ele não excluirá seu branch local também? (Edit: nm, vejo que explicitamente não, a menos que você execute git remote prune.)
Tim Keating
1
O que acontece com o histórico do ramo?
geoidesic de
40

depois de completar o código, primeiro mescle o branch para o master e depois exclua esse branch

git checkout master
git merge <branch-name>
git branch -d <branch-name>
Dau
fonte
e isso está em minha própria máquina de desenvolvimento, certo? a pessoa principal que aceita qualquer código novo .. sua máquina está em outro lugar.
Pure.Krome
2
Se outra pessoa estiver fazendo a fusão, ele geralmente tem o ponteiro do branch em um controle remoto separado, por exemplo, remetente / nome do branch. Ele também precisará usar git remote prune senderpara se livrar dele depois de você - embora, na maioria dos casos, ele não precise se preocupar.
jørgensen
1
Você nunca deve fundir seu próprio branch a menos que seja o responsável por integrá-lo na árvore principal. Se você não estiver e pediu a alguém para integrá-lo, atualize seu branch master com os novos commits remotos - eles devem conter tudo o que você solicitou para ser puxado - e então exclua seu branch. Isso garante que você não terá problemas se a outra pessoa mudar as coisas.
ThiefMaster