Git Merge –no-ff Alternativ

Git Merge No Ff Option



Den enkla sammanslagningsförmågan hos git är en av dess styrkor. Under en sammanslagning använder git snabbspolning när det märks att huvudet för den aktuella grenen är en förfader till åtagandet du försöker slå samman. I en snabbspolningssammanfogning finns det inget nytt åtagande. Git flyttar bara pekaren. Om detta beteende inte är önskvärt kan du använda no-ff-flaggan för att skapa ett nytt åtagande för sammanslagningen.

Hur sammanslagning ser ut med och utan snabbspolning framåt

Efter en snabbspolning kommer din git-historia att se ut så här:







C0 -> C1 -> C2—> C3



För samma antal åtaganden, här är en sammanfogningshistorik utan snabbspolning:







I det första fallet finns det ingen indikation på att det fanns någon förgrening. I det andra fallet visar historiken ett C4 -åtagande för att ange var sammanslagningen skedde.

Gå igenom ett exempel

Du kommer att skapa ett git-arkiv, skapa en gren och sedan försöka slå samman med och utan snabbspolning.



Avsnitt 1: Inställning

Först kan du skapa git -förvaret med följande steg:

$ mkdir mitt_projekt
$ cd my_project
$ git init
$ touch a.txt
$ git add -A
$ git commit -m 'C0: Lägga till a.txt'

Låt oss nu skapa en gren som heter funktioner och göra några ändringar:

$ git gren funktioner
$ git checkout -funktioner
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Lägga till b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Lägga till c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Lägga till d.txt'

Avsnitt 2: Slå ihop med snabbspolning

Låt oss gå tillbaka till huvudgrenen och slå ihop funktioner som förgrenas till den:

$git checkoutbemästra
$git slå sammanfunktioner

Produktion:

Uppdaterar 08076fb..9ee88eb
Snabbspola
b.txt | 0
c.txt | 0
d.txt | 0
3 filer ändrade, 0 infogningar (+), 0 borttagningar (-)
skapa -läge 100644 b.txt
skapa -läge 100644 c.txt
skapa läge 100644 d.txt

Om du kontrollerar historiken ser du:

$ git log -online
9ee88eb C3: Lägga till d.txt
c72b92c C2: Lägga till c.txt
2e4039e C1: Lägga till b.txt
08076fb C0: Lägga till a.txt

Så alla åtaganden från funktioner gren finns i huvudgrenen nu. Om du fortsätter att göra ändringar i master finns det inget sätt att veta när funktionsgrenen slogs samman i den.

Avsnitt 3: Utan snabbspolning

Upprepa avsnitt 1 för en ny mapp.

Prova sedan en sammanslagning utan snabbspolning:

$git checkoutbemästra
$git slå samman -nej-fffunktion

Det öppnar följande i din gits standardtextredigerare:

Slå samman gren'funktioner'
# Ange ett bindande meddelande för att förklara varför denna sammanslagning är nödvändig,
# särskilt om det slår samman en uppdaterad uppströms till en ämnesgren.
#
# Rader som börjar med '#' ignoreras och ett tomt meddelande avbryts
# åtagandet.

Ändra kommentarerna. I det här fallet kan du bara lägga till C4: before Merge -grenens 'funktioner'. Utdata ska se ut så här:

Sammanfogning gjord av den 'rekursiva' strategin.
b.txt | 0
c.txt | 0
d.txt | 0
3 filer ändrade, 0 infogningar (+), 0 borttagningar (-)
skapa -läge 100644 b.txt
skapa -läge 100644 c.txt
skapa läge 100644 d.txt

Om du nu kontrollerar historiken ska den se ut så här:

$ git log -online
e071527 C4: Slå samman filialens funktioner
bb79c25 C3: Lägger till d.txt
692bd8c C2: Lägger till c.txt
a0df62a C1: Lägga till b.txt
7575971 C0: Lägga till a.txt

Du kan se att även om du har exakt samma ändringar, har denna version av sammanslagning den extra C4 -åtagandet som betyder att sammanslagningen av funktioner förgrenas till master.

Slutsats

Git merge no-ff-flaggan hjälper till att skapa en mer läsbar historia. Det låter dig sätta taggar som tydligt visar var sammanslagningarna skedde. Det kan spara tid och ansträngning under felsökning.

Ytterligare studier:

Referenser: