Opțiunea Git Merge –no-ff

Git Merge No Ff Option



Capacitatea de fuzionare ușoară a git este unul dintre punctele sale forte. În timpul unei îmbinări, git folosește îmbinarea rapidă când observă că HEAD-ul ramurii curente este un strămoș al commit-ului pe care încercați să-l îmbinați. În cadrul unei îmbinări rapide, nu există o nouă comitere. Git doar mută indicatorul. Dacă acest comportament nu este de dorit, puteți utiliza semnalul no-ff pentru a crea un nou commit pentru îmbinare.

Cum arată Merge cu și fără Fast-Forward

După un avans rapid, istoricul dvs. git va arăta astfel:







C0 -> C1 -> C2—> C3



Pentru același număr de confirmări, iată un istoric de îmbinare fără avans rapid:







În primul caz, nu există nicio indicație că ar exista vreo ramificare. În cel de-al doilea caz, istoricul arată un commit C4 pentru a indica unde a avut loc îmbinarea.

Mergând printr-un exemplu

Veți crea un depozit git, veți crea o ramură și apoi veți încerca îmbinările cu și fără avans rapid.



Secțiunea 1: Configurare

Mai întâi, puteți crea depozitul git cu următorii pași:

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

Acum să creăm o ramură numită funcții și să comitem câteva modificări:

Funcții de ramură $ git
$ git checkout features
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Adăugarea b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Adăugarea c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Adăugarea d.txt'

Secțiunea 2: Îmbinarea cu redirecționarea rapidă

Să ne întoarcem la filiala principală și să unim filiala de funcții în ea:

$git checkoutmaestru
$git mergeCaracteristici

Ieșire:

Se actualizează 08076fb..9ee88eb
Repede inainte
b.txt | 0
c.txt | 0
d.txt | 0
3 fișiere modificate, 0 inserții (+), 0 ștergeri (-)
creați modul 100644 b.txt
crearea modului 100644 c.txt
creați modul 100644 d.txt

Dacă verificați istoricul, veți vedea:

$ git log --oneline
9ee88eb C3: Adăugarea d.txt
c72b92c C2: Adăugarea c.txt
2e4039e C1: Adăugarea b.txt
08076fb C0: Adăugarea a.txt

Deci, toate comitetele din ramura de caracteristici se află acum în ramura principală. Dacă continuați să faceți modificări la master, nu există nicio modalitate de a ști când ramura de caracteristici a fost îmbinată în ea.

Secțiunea 3: Fără redirecționare rapidă

Repetați secțiunea 1 pentru un folder nou.

Apoi, încercați o îmbinare fără redirecționare rapidă:

$git checkoutmaestru
$git merge --no-ffcaracteristică

Se va deschide următoarele în editorul de text implicit al git-ului:

Fuzionează ramura'Caracteristici'
# Vă rugăm să introduceți un mesaj de confirmare pentru a explica de ce este necesară această îmbinare,
# mai ales dacă îmbină un upstream actualizat într-o ramură de subiect.
#
# Liniile care încep cu „#” vor fi ignorate și un mesaj gol se întrerupe
# comiterea.

Modificați comentariile. În acest caz, puteți adăuga doar C4: înainte de Merge ramură „caracteristici”. Rezultatul ar trebui să arate astfel:

Îmbinarea realizată de strategia „recursivă”.
b.txt | 0
c.txt | 0
d.txt | 0
3 fișiere modificate, 0 inserții (+), 0 ștergeri (-)
creați modul 100644 b.txt
crearea modului 100644 c.txt
creați modul 100644 d.txt

Acum, dacă verificați istoricul, ar trebui să arate după cum urmează:

$ git log --oneline
e071527 C4: Mergeți „caracteristicile” ramurii
bb79c25 C3: Adăugarea d.txt
692bd8c C2: Adăugarea c.txt
a0df62a C1: Adăugarea b.txt
7575971 C0: Adăugarea a.txt

Puteți vedea că, deși aveți exact aceleași modificări, această versiune de îmbinare are un comitet suplimentar C4 care semnifică îmbinarea ramurilor de caracteristici în master.

Concluzie

Steagul git merge no-ff ajută la crearea unui istoric mai lizibil. Vă permite să puneți etichete care arată clar unde au avut loc îmbinările. Vă poate economisi timp și efort în timpul depanării.

Continuarea studiilor:

Referințe: