Come chiudere un ramo Git?


112

quindi sto iniziando a usare Git + GitHub.

Nel nostro piccolo team distribuito, ogni membro crea il proprio ramo per ogni problema / requisito assegnato.

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

ora code code, commit, code, commit, ecc ...

poi pull request, code-fixup, commit, code, commitecc ..

e FINALMENTE ... la richiesta pull è accettata.

Woot.

ma .. ora cosa? (...... imbarazzante ......)

La persona che ha creato il ramo sulla propria macchina di sviluppo locale deve .. chiudere il ramo? Un suggerimento è stato per la persona dev di eliminare il ramo `(... -D ...) e quindi fare un pull / refresh del master .. che poi otterrà tutto il codice del ramo.

Hmmmmm ... non sono sicuro - per favore aiutatemi :)


16
Un ramo in Git è solo un'etichetta su un commit specifico, quindi in pratica, se non ne hai più bisogno, elimina semplicemente quel "ramo" (quella "etichetta" su quel commit). A livello locale, basta fare un git branch Issue#1 -de questo è tutto ciò che c'è - nessun codice è perso, solo un'etichetta viene rimossa dal tuo repository
marc_s

1
@marc_s suggerisco di fare solo una risposta :)
KingCrunch

Quindi @marc_s - stai dicendo che la pratica standard una volta che hai finito il tuo ramo .. e il ramo è stato spinto .. lo cancelliamo? E la fusione?
Pure.Krome

@ Pure.Krome Almeno ho supposto che per "pull request è accettata" intendi che è già fusa. Sì, ovviamente, integra le modifiche in master, developo qualunque sia il nome del tuo ramo di sviluppo (Merge, Rebase (with / without squash), ...)
KingCrunch

quando ho detto "la richiesta di pull è accettata" .. che succede da qualche altra parte. (es. lo sviluppatore responsabile che approva tutto il codice che è PR'd ...). Mi chiedevo se dovrei passare al master sulla MIA macchina di sviluppo locale e fare anche un'unione.
Pure.Krome

Risposte:


181

Chiediamo allo sviluppatore che richiede la richiesta di pull di dichiarare che desidera che il ramo venga eliminato. Il più delle volte questo è il caso. Ci sono momenti in cui è necessario un ramo (es. Copiare le modifiche in un altro ramo di rilascio).

Le mie dita hanno memorizzato il nostro 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>

Un ramo è per il lavoro. Un tag segna un luogo nel tempo. Taggando ogni unione di rami possiamo resuscitare un ramo se necessario. I tag del ramo sono stati utilizzati più volte per rivedere le modifiche.


8
Abbiamo apportato una modifica recente alla nostra procedura. L'utilizzo git push --tagsè pesante e scarica tutti i tag. Ciò rende difficile avere i propri tag locali. Invece usiamo git push origin branch-<feature-branch>per spingere solo un tag.
Bill Door

Quindi l'ultima riga, è necessario ricordarsi di utilizzare il nome del tag per il ramo della funzionalità, che abbiamo impostato in precedenza a "branch- <feature-branch>", piuttosto che solo <feature-branch>. Corretta?
Premier Bromanov

@PremierBromanov l'ultima riga è per eliminare il ramo remoto. Per ricordare il tag @BillDoor hanno usato git push --tags.
Deivide

Script eccellente !!
Kike Gamboa

41

Sì, elimina il ramo eseguendo git push origin :branchname. Per risolvere un nuovo problema in un secondo momento, diramati nuovamente dal master.


3
Ciò eliminerà il ramo remoto, non quello locale.
KingCrunch

5
Non so perché questo sia modificato a -2, questa è la risposta corretta. Hanno sicuramente una filiale remota, in quale altro modo potrebbero emettere un PR contro di essa?
Ana Betts

Se lo fai e poi esegui un git pull, non cancellerà anche il tuo ramo locale? (Modifica: nm, vedo che esplicitamente non lo fa, a meno che tu non esegua git remote prune.)
Tim Keating

1
Cosa succede alla cronologia della filiale?
geoidesico

40

dopo aver completato il codice, prima unisci il ramo al master, quindi elimina quel ramo

git checkout master
git merge <branch-name>
git branch -d <branch-name>

e questo è sulla MIA macchina di sviluppo, giusto? la persona principale che accetta qualsiasi nuovo codice .. la sua macchina è altrove.
Pure.Krome

2
Se qualcun altro sta facendo l'unione, di solito ha il puntatore del tuo ramo in un telecomando separato, ad esempio mittente / nome-ramo. Dovrà usarlo git remote prune senderanche per sbarazzarsene dopo che lo hai fatto tu, anche se nella maggior parte dei casi non ha bisogno di preoccuparsene.
jørgensen

1
Non dovresti mai unire il tuo ramo a meno che tu non sia responsabile dell'integrazione nell'albero principale. Se non lo sei e hai chiesto a qualcun altro di integrarlo, aggiorna il tuo ramo principale con i nuovi commit remoti - dovrebbero contenere tutto ciò che hai richiesto di essere tirato - e quindi elimina il tuo ramo. In questo modo non avrai problemi se l'altro ragazzo ha cambiato le cose.
ThiefMaster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.