2011-12-23 29 views
88

quindi sto iniziando a utilizzare Git + GitHub.Come chiudere un ramo Git?

Nel nostro piccolo team distribuito, ogni membro crea il proprio ramo per ogni problema/requisito a cui è 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, commit .. ecc

e FINALMENTE ... la richiesta di pull è accettata.

Woot.

ma ... e adesso? (...... imbarazzante ......)

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

Hmmmmm ... non è sicuro - si prega di aiuto :)

+14

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

+1

@marc_s Suggerisco di fare solo una risposta fuori da esso :) – KingCrunch

+0

Quindi @marc_s - stai dicendo che la pratica standard una volta che hai finito il tuo ramo .. e il ramo è stato spinto ... lo cancelliamo? Che dire della fusione? –

risposta

152

Chiediamo che lo sviluppatore per chiedere lo stato di richiesta di pull che vorrebbero il ramo cancellato. Il più delle volte questo è il caso. Ci sono momenti in cui è necessario un ramo (ad esempio 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. Codificando ogni unione si può far risorgere un ramo, se necessario. I tag di ramo sono stati utilizzati più volte per esaminare le modifiche.

+7

Abbiamo apportato una recente modifica alla nostra procedura. L'uso di 'git push --tags' è pesante e scarica tutti i tag. Ciò rende difficile avere i propri tag locali. Invece usiamo 'git push origin branch- ' per spingere solo il tag. –

+0

Quindi, l'ultima riga, è necessario ricordare di usare il nome del tag per il ramo della funzione, che abbiamo impostato in precedenza su "branch- ", piuttosto che su . Corretta? –

+0

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

37

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

+3

Questo eliminerà il ramo remoto, non quello locale. – KingCrunch

+3

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

+1

@PaulBetts Sono d'accordo. Ho votato anche io. – gilligan

34

dopo completa il codice prima fondono filiale a padroneggiare quindi eliminare quel ramo

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

e questo è su MY own dev machine, giusto? la persona principale che accetta qualsiasi nuovo codice .. la sua macchina è altrove. –

+2

Se qualcun altro sta eseguendo l'unione, ha in genere il puntatore di diramazione in un remoto separato, ad es. mittente/ramo-nome. Avrà bisogno di usare 'git remote prune sender' per sbarazzarsene dopo averlo fatto - anche se nella maggior parte dei casi, non gliene importa nulla. –

+1

* Non * devi mai unire il tuo ramo a meno che tu non sia il solo responsabile per l'integrazione nella struttura principale. Se non lo sei e chiedi a qualcun altro di integrarlo, aggiorna il tuo ramo principale con i nuovi commit a distanza - devono contenere tutto ciò che hai richiesto per essere estratto - e quindi eliminare il tuo ramo. Questo assicura che non avrai problemi se l'altro ragazzo ha cambiato le cose. – ThiefMaster