Opció Git Merge –no-ff

Git Merge No Ff Option



La capacitat de combinació fàcil de git és un dels seus punts forts. Durant una combinació, git utilitza la combinació d'avanç ràpid quan es nota que el HEAD de la branca actual és un avantpassat de la confirmació que intenteu combinar. En una fusió avançada ràpida, no hi ha cap confirmació nova. Git només mou el punter. Si aquest comportament no és desitjable, podeu utilitzar el senyalador no-ff per crear una nova confirmació per a la combinació.

Com es veu la combinació amb i sense avançar ràpidament

Després d'un avanç ràpid, el vostre historial de git serà així:







C0 -> C1 -> C2—> C3



Per al mateix nombre de confirmacions, aquí teniu un historial de combinacions sense avançament ràpid:







En el primer cas, no hi ha cap indicació que hi hagi cap ramificació. En el segon cas, l'historial mostra una confirmació C4 per indicar on s'ha produït la combinació.

Caminant per un exemple

Creeu un dipòsit de git, creeu una branca i després provareu les combinacions amb i sense avançament ràpid.



Secció 1: Configuració

En primer lloc, podeu crear el repositori git amb els passos següents:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.txt
$ git add -A
$ git commit -m 'C0: Afegint a.txt'

Ara creem una sucursal anomenada funcions i realitzem alguns canvis:

Funcions de la branca $ git
Funcions de compra de $ git
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Addició de b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Afegint c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Afegint d.txt'

Secció 2: Combina amb el reenviament ràpid

Tornem a la branca mestra i combinem la branca de funcions:

$git checkoutmestre
$git mergecaracterístiques

Sortida:

S'està actualitzant 08076fb..9ee88eb
Avanç ràpid
b.txt | 0
c.txt | 0
d.txt | 0
3 fitxers canviats, 0 insercions (+), 0 supressions (-)
mode de creació 100644 b.txt
mode de creació 100644 c.txt
mode de creació 100644 d.txt

Si comproveu l’historial, veureu:

$ git log --oneline
9ee88eb C3: Afegint d.txt
c72b92c C2: afegint c.txt
2e4039e C1: Addició de b.txt
08076fb C0: Afegint a.txt

Per tant, totes les confirmacions de la branca de funcions es troben ara a la branca mestra. Si continueu fent canvis al mestre, no hi ha manera de saber quan es va fusionar la branca de funcions.

Secció 3: sense reenviament ràpid

Repetiu la secció 1 per a una carpeta nova.

A continuació, proveu de combinar sense reenviar ràpidament:

$git checkoutmestre
$git merge --no-ffcaracterística

S'obrirà el següent a l'editor de text predeterminat del vostre git:

Combina la branca'característiques'
# Introduïu un missatge de confirmació per explicar per què és necessària aquesta combinació,
# sobretot si combina una actualització de la pujada actualitzada en una branca de tema.
#
# Les línies que comencin per '#' s'ignoraran i s'abortarà un missatge buit
# el commit.

Modifiqueu els comentaris. En aquest cas, només podeu afegir C4: abans de combinar les 'funcions' de la branca. La sortida hauria de ser així:

Fusió feta per l'estratègia 'recursiva'.
b.txt | 0
c.txt | 0
d.txt | 0
3 fitxers canviats, 0 insercions (+), 0 supressions (-)
mode de creació 100644 b.txt
mode de creació 100644 c.txt
mode de creació 100644 d.txt

Ara, si consulteu l'historial, hauria de ser el següent:

$ git log --oneline
e071527 C4: fusiona les 'funcions' de la branca
bb79c25 C3: Afegint d.txt
692bd8c C2: afegint c.txt
a0df62a C1: afegint b.txt
7575971 C0: Afegint a.txt

Podeu veure que, tot i que teniu exactament els mateixos canvis, aquesta versió de merge té la confirmació addicional C4 que significa la fusió de funcions branca en mestre.

Conclusió

La marca git merge no-ff ajuda a crear un historial més llegible. Permet posar etiquetes que mostrin clarament on es van produir les combinacions. Us pot estalviar temps i esforç durant la depuració.

Estudis avancats:

Referències: