Git

Git Merge -no-ff optie

Git Merge -no-ff optie

Git Merge no-ff optie begrijpen

De gemakkelijke merge-mogelijkheid van git is een van zijn sterke punten. Tijdens een merge gebruikt git fast-forward merge wanneer het merkt dat de HEAD van de huidige branch een voorouder is van de commit die je probeert te mergen. In een fast-forward merge is er geen nieuwe commit. Git verplaatst alleen de aanwijzer. Als dit gedrag niet wenselijk is, kun je de no-ff-vlag gebruiken om een ​​nieuwe vastlegging voor de samenvoeging te maken.

Hoe samenvoegen eruitziet met en zonder Fast-Forward

Na snel vooruitspoelen ziet je git-geschiedenis er als volgt uit:

C0 -> C1  -> C2-> C3

Voor hetzelfde aantal commits is hier een merge geschiedenis zonder fast-forward:

In het eerste geval is er geen indicatie dat er sprake was van vertakking. In het tweede geval toont de geschiedenis een C4-commit om aan te geven waar de samenvoeging plaatsvond.

Door een voorbeeld lopen

Je maakt een git-repository, maakt een branch en probeert dan de merges met en zonder fast-forward.

Sectie 1: Installatie

Ten eerste kun je de git-repository maken met de volgende stappen:

$ mkdir mijn_project
$ cd mijn_project
$ git init
$ raak een . aan.tekst
$ git add -A
$ git commit -m "C0: a . toevoegen.tekst"

Laten we nu een branch maken met de naam features en een paar wijzigingen doorvoeren:

$ git branch-functies
$ git checkout-functies
$ raak b . aan.tekst
$ git add -A
$ git commit -m "C1: b . toevoegen.tekst"
$ raak c . aan.tekst
$ git add -A
$ git commit -m "C2: c . toevoegen.tekst"
$ raak d aan.tekst
$ git add -A
$ git commit -m "C3: d . toevoegen.tekst"

Sectie 2: Samenvoegen met snel doorsturen

Laten we teruggaan naar de master-branch en de features-branch erin samenvoegen:

$ git checkout master
$ git merge-functies

Uitgang:

08076fb bijwerken ... 9ee88eb
Vooruitspoelen
b.txt | 0
c.txt | 0
d.txt | 0
3 bestanden gewijzigd, 0 invoegingen (+), 0 verwijderingen (-)
maakmodus 100644 b.tekst
maakmodus 100644 c.tekst
maakmodus 100644 d.tekst

Als u de geschiedenis controleert, ziet u:

$ git log --oneline
9ee88eb C3: d . toevoegen.tekst
c72b92c C2: C . toevoegen.tekst
2e4039e C1: b . toevoegen.tekst
08076fb C0: Een . toevoegen.tekst

Dus alle commits van de features branch zitten nu in de master branch. Als je doorgaat met het maken van wijzigingen aan de master, is er geen manier om te weten wanneer de features branch erin is samengevoegd.

Sectie 3: Zonder Fast Forwarding

Herhaal sectie 1 voor een nieuwe map.

Probeer vervolgens een samenvoeging zonder vooruitspoelen:

$ git checkout master
$ git merge --no-ff functie

Het zal het volgende openen in de standaard teksteditor van je git:

Branch 'functies' samenvoegen
# Voer een commit-bericht in om uit te leggen waarom deze samenvoeging nodig is,
# vooral als het een bijgewerkte upstream samenvoegt in een topic branch.
#
# Regels die beginnen met '#' worden genegeerd en een leeg bericht wordt afgebroken
# de commit.

Pas de opmerkingen aan. In dit geval kun je gewoon "C4:" toevoegen voor "Vertakking samenvoegen 'functies'". De uitvoer zou er als volgt uit moeten zien:

Samenvoeging gemaakt door de 'recursieve' strategie.
b.txt | 0
c.txt | 0
d.txt | 0
3 bestanden gewijzigd, 0 invoegingen (+), 0 verwijderingen (-)
maakmodus 100644 b.tekst
maakmodus 100644 c.tekst
maakmodus 100644 d.tekst

Als u nu de geschiedenis controleert, zou deze er als volgt uit moeten zien:

$ git log --oneline
e071527 C4: Tak 'functies' samenvoegen
bb79c25 C3: d . toevoegen.tekst
692bd8c C2: c . toevoegen.tekst
a0df62a C1: b . toevoegen.tekst
7575971 C0: toevoegen van a.tekst

Je kunt zien dat, ook al heb je exact dezelfde wijzigingen, deze versie van merge de extra C4 commit heeft, wat het samenvoegen van features in de master aangeeft.

Conclusie

De git merge no-ff vlag helpt een beter leesbare geschiedenis te creëren. Hiermee kunt u tags plaatsen die duidelijk laten zien waar de samenvoegingen hebben plaatsgevonden. Het kan u tijd en moeite besparen tijdens het debuggen.

Verdere studie:

Referenties:
Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...
Hoe FPS te verhogen in Linux?
FPS staat voor Beelden per seconde. De taak van FPS is om de framesnelheid te meten bij het afspelen van video's of speluitvoeringen. In eenvoudige wo...