Puoi chiudere i rami in Git?

6

In Mercurial puoi chiudere un ramo come questo: hg commit --close-branch , questo significa che il ramo non sarà più elencato ma continuerà a esistere, e può ancora essere elencato se usi hg branches --closed

Ho appreso che in Git generalmente i rami non vengono mantenuti, scompaiono, specialmente quando si eseguono fusioni veloci.

Quindi la mia domanda è: puoi tenere le filiali in git ma in un modo che non li elenchi più?

Modifica : un altro contesto aggiuntivo: nei rami Mercurial vi sono i metadati, quindi ogni commit riconosce sempre il suo ramo. In Mercurial se si desidera eliminare un ramo, si spoglia la revisione del ramo base. Puoi anche rebase e finire con lo stesso risultato di Git. I segnalibri di Mercurial sono puntatori, quindi hanno lo stesso identico comportamento di un Git Branch.

    
posta dukeofgaming 06.06.2013 - 07:29
fonte

3 risposte

11

So che non è esattamente la stessa cosa, ma potresti usare un flusso di lavoro in cui taggare i rami delle funzionalità prima di "chiuderli"?

Ad esempio:

git merge feature-wxyz -m "Merge message"
git tag closed-feature-wxyz feature-wxyz
git branch -d feature-wxyz

Naturalmente, potresti anche annotare il tag ( git tag -a closed-feature-wxyz -m "Description of closed branch" feature-wxyz ), se lo desideri.

So che non è esattamente quello che hai chiesto, ma questo avrebbe soddisfatto:

  1. viene mantenuto un record del ramo
  2. il ramo non è più visibile in git branch
  3. puoi ancora basare un nuovo ramo su quello chiuso: git checkout -b new-feature-ghij closed-feature-wxyz
risposta data 06.06.2013 - 09:06
fonte
5

Se vuoi semplicemente unire un ramo mantenendo un record della sua esistenza, puoi sempre dire a git di non fare avanzare velocemente l'unione usando git merge --no-ff questo creerà un nuovo commit con due genitori e un messaggio di commit sulla falsariga di "Unita [nome_struzione] nel master"

Dato che git ti permette di estrarre qualsiasi commit e creare un ramo da esso, puoi sempre cercare il merge commit e ricreare il branch se ne hai bisogno. Come altri hanno affermato, l'utilizzo di git tag può facilitare la ricerca di questi elementi.

Se non stai unendo il ramo, devi essere più creativo. La mia prima idea sarebbe quella di aggiungere un nuovo telecomando chiamato archivio, e spingere i rami che sei stanco a guardarci dentro.

$ git init --bare ../archive.git
$ git remote add archive ../archive.git
$ git push archive feature_branch
$ git branch -D feature_branch
$ git branch -r
    origin/master
    archive/feature_branch

questo thread suggerisce di usare git update-ref per spostare il ramo da qualche parte non lo cercherà, ma questo è un po 'troppo complicato con i git internals per i miei gusti.

    
risposta data 08.06.2013 - 04:16
fonte
1

Non sono a conoscenza di questa funzione direttamente, ma come in git tag e branch è essenzialmente la stessa eccetto che quest'ultima non è una testa, se si crea un tag e si rimuove il branch, IMO si ottiene lo stesso comportamento. A meno che non abbia frainteso il vero obiettivo.

    
risposta data 06.06.2013 - 12:39
fonte

Leggi altre domande sui tag