Git Merge -No -FF Opzione

Git Merge -No -FF Opzione

Comprensione dell'opzione senza unire Git

La facile capacità di unione di Git è uno dei suoi punti di forza. Durante una fusione, Git usa unione rapida quando nota che il capo del ramo attuale è un antenato del commit che stai cercando di fondersi. In una fusione rapida, non c'è un nuovo commit. Git sposta il puntatore. Se questo comportamento non è desiderabile, è possibile utilizzare il flag no-ff per creare un nuovo commit per la fusione.

Come si unisce unisce e senza avanzare rapidamente

Dopo un avanzamento rapido, la tua storia di Git sembrerà così:

C0 -> C1 -> C2-> C3

Per lo stesso numero di commit, ecco una storia di unione senza avanzare rapidamente:

Nel primo caso, non vi è alcuna indicazione che vi fosse alcuna ramificazione. Nel secondo caso, la storia sta mostrando un commit C4 per indicare dove si è verificata l'accusa.

Camminando attraverso un esempio

Creerai un repository git, creerai un ramo e quindi proverai le fusioni e senza rapidamente.

Sezione 1: configurazione

Innanzitutto, è possibile creare il repository Git con i seguenti passaggi:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.TXT
$ git aggiungi -a
$ git commit -m "c0: aggiunta a.TXT"

Ora creiamo una filiale chiamata funzionalità e commettiamo alcune modifiche:

Caratteristiche della filiale $ git
Funzionalità di checkout $ git
$ touch b.TXT
$ git aggiungi -a
$ git commit -m "c1: aggiunta b.TXT"
$ touch c.TXT
$ git aggiungi -a
$ git commit -m "c2: aggiunta c.TXT"
$ touch d.TXT
$ git aggiungi -a
$ git commit -m "c3: aggiunta d.TXT"

Sezione2: unire con rapido avanzamento

Torniamo a Master Branch e unisci le caratteristiche di ramo:

$ git checkout master
$ git unisci funzionalità

Produzione:

Aggiornamento 08076fb… 9ee88eb
Avanti veloce
B.txt | 0
C.txt | 0
D.txt | 0
3 file modificati, 0 inserzioni (+), 0 eliminazioni (-)
Crea modalità 100644 B.TXT
Crea modalità 100644 C.TXT
Crea modalità 100644 d.TXT

Se controlli la storia, vedrai:

$ git log --oneline
9ee88EB C3: aggiunta d.TXT
C72B92C C2: aggiunta C.TXT
2E4039E C1: aggiunta B.TXT
08076FB C0: aggiunta a.TXT

Quindi, tutti i commit dalla filiale di caratteristiche sono ora nella filiale principale. Se continui a apportare modifiche al padrone, non c'è modo di sapere quando la filiale delle caratteristiche è stata unita.

Sezione 3: senza rapido vantaggio

Ripeti la sezione 1 per una nuova cartella.

Quindi, prova un'unione senza avanzamento rapido:

$ git checkout master
Feature $ git --No-FF

Aprirà quanto segue nell'editor di testo predefinito del tuo GIT:

Unisci le caratteristiche di ramo "
# Inserisci un messaggio di commit per spiegare perché questa unione è necessaria,
# Soprattutto se si fonde un upstream aggiornato in una filiale di argomenti.
#
# Le righe che iniziano con '##' verranno ignorate e un messaggio vuoto si interrompe
# il commit.

Modifica i commenti. In questo caso, puoi semplicemente aggiungere "C4:" Prima di "Under Branch" Funzionalità "". L'output dovrebbe apparire così:

Unione fatta dalla strategia "ricorsiva".
B.txt | 0
C.txt | 0
D.txt | 0
3 file modificati, 0 inserzioni (+), 0 eliminazioni (-)
Crea modalità 100644 B.TXT
Crea modalità 100644 C.TXT
Crea modalità 100644 d.TXT

Ora se controlli la storia, dovrebbe apparire come quanto segue:

$ git log --oneline
E071527 C4: unisci le caratteristiche della filiale "
BB79C25 C3: aggiunta D.TXT
692bd8c C2: aggiunta C.TXT
A0DF62A C1: aggiunta B.TXT
7575971 C0: aggiunta a.TXT

Puoi vedere che anche se hai le stesse modifiche esatte, questa versione di Munge ha il commit C4 extra che indica la fusione delle funzionalità di ramo in Master.

Conclusione

Il Git unisce la bandiera no-ff aiuta a creare una cronologia più leggibile. Ti consente di mettere tag che mostrano chiaramente dove si sono verificate le fusioni. Può farti risparmiare tempo e fatica durante il debug.

Ulteriori studi:

  • https: // git-scm.com/docs/git-merge
Riferimenti:
  • Stack Overflow: What-IS-IS-the-Deference-Between-Git-Merge-and-Git-Merge-No-FF
  • https: // www.Atlassian.com/git/tutorials/use-ranchs/git-merge