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 $ gitFuncions 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..9ee88ebAvanç 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 --oneline9ee88eb 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 --onelinee071527 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ó.