Comment fermer une branche Git?

112

donc je commence à utiliser Git + GitHub.

Dans notre petite équipe distribuée, chaque membre crée sa propre branche pour chaque problème / exigence qui lui est alloué.

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

maintenant code code, commit, code, commit, etc ...

puis pull request, code-fixup, commit, code, commit.. etc.

et ENFIN ... la demande d'extraction est acceptée.

Woot.

mais .. maintenant quoi? (......gênant......)

La personne qui a créé la branche sur sa machine de développement locale doit-elle .. fermer la branche? Une suggestion était pour la personne de développement de supprimer la branche `(... -D ...) et de faire ensuite une extraction / actualisation du maître .. qui obtiendra alors tout son code de branche.

Hmmmmm ... pas sûr - aidez s'il vous plaît :)

Pure.Krome
la source
16
Une branche dans Git est juste une étiquette sur un commit spécifique - donc fondamentalement, si vous n'en avez plus besoin - supprimez simplement cette "branche" (cette "étiquette" sur ce commit). Localement, il suffit de faire un git branch Issue#1 -det c'est tout ce qu'il y a - aucun code n'est perdu, juste une étiquette est supprimée de votre référentiel
marc_s
1
@marc_s Je suggère d'en faire une réponse :)
KingCrunch
Donc @marc_s - vous dites que la pratique standard une fois que vous avez terminé votre branche .. et la branche a été poussée .. nous la supprimons? Et la fusion?
Pure.Krome
@ Pure.Krome Au moins j'ai supposé, que par "pull request est acceptée", vous voulez dire, qu'il est déjà fusionné. Oui, bien sûr, intégrez les changements dans master, developou quel que soit le nom de votre branche de développement (Merge, Rebase (avec / sans squash), ...)
KingCrunch
quand j'ai dit «la demande de tirage est acceptée» .. cela se produit ailleurs. (c'est-à-dire le développeur en charge qui approuve tout le code qui est PR'd ...). Je me demandais si je devais passer au master sur ma machine de développement locale et faire une fusion également.
Pure.Krome

Réponses:

181

Nous demandons au développeur qui demande la demande d'extraction d'indiquer qu'il souhaite que la branche soit supprimée. La plupart du temps, c'est le cas. Il y a des moments où une branche est nécessaire (par exemple en copiant les modifications dans une autre branche de version).

Mes doigts ont mémorisé notre processus:

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>

Une succursale, c'est pour le travail. Une balise marque un lieu dans le temps. En étiquetant chaque fusion de branche, nous pouvons ressusciter une branche si cela est nécessaire. Les balises de branche ont été utilisées plusieurs fois pour examiner les modifications.

Bill porte
la source
8
Nous avons récemment modifié notre procédure. L'utilisation git push --tagsest lourde et télécharge toutes les balises. Cela rend difficile d'avoir vos propres balises locales. Au lieu de cela, nous utilisons git push origin branch-<feature-branch>pour pousser une seule balise.
Bill Door
Donc, la dernière ligne, vous devez vous rappeler d'utiliser le nom de la balise pour la branche de fonctionnalité, que nous avons défini précédemment sur "branch- <feature-branch>", plutôt que simplement <feature-branch>. Correct?
Premier Bromanov
@PremierBromanov la dernière ligne est pour les suppressions de branche distante. Rappelez-vous que le tag @BillDoor a utilisé git push --tags.
Deivide
Excellent script !!
Kike Gamboa
41

Oui, supprimez simplement la branche en exécutant git push origin :branchname. Pour résoudre un nouveau problème plus tard, quittez à nouveau le maître.

Gaurav Gupta
la source
3
Cela supprimera la branche distante, pas la branche locale.
KingCrunch
5
Je ne sais pas pourquoi cela est modifié à -2, c'est la bonne réponse. Ils ont définitivement une succursale distante, comment pourraient-ils émettre un PR contre elle?
Ana Betts
Si vous faites cela, puis faites un git pull, ne supprimera-t-il pas également votre branche locale? (Edit: nm, je vois que ce n'est pas explicitement le cas, sauf si vous exécutez git remote prune.)
Tim Keating
1
Qu'arrive-t-il à l'historique de la succursale?
geoidesic
40

après avoir terminé le code, commencez par fusionner la branche avec le maître, puis supprimez cette branche

git checkout master
git merge <branch-name>
git branch -d <branch-name>
Dau
la source
et ceci est sur ma propre machine de développement, non? la personne principale qui accepte tout nouveau code .. sa machine est ailleurs.
Pure.Krome
2
Si quelqu'un d'autre effectue la fusion, il a généralement votre pointeur de branche dans une télécommande séparée, par exemple expéditeur / nom-branche. Il devra l'utiliser git remote prune senderpour s'en débarrasser après vous - même si dans la plupart des cas, il n'a pas besoin de s'en soucier.
jørgensen
1
Vous ne devriez jamais fusionner votre propre branche sauf si vous êtes responsable de son intégration dans l'arborescence principale. Si ce n'est pas le cas et que vous avez demandé à quelqu'un d'autre de l'intégrer, mettez à jour votre branche principale avec les nouveaux commits distants - ils devraient contenir tout ce que vous avez demandé à être extrait - puis supprimez votre branche. Cela garantit que vous n'aurez aucun problème si l'autre gars a changé les choses.
ThiefMaster