Wat is git fast-forwarding?

Dit klinkt misschien als een domme vraag, maar ik kan er geen eenvoudig antwoord op vinden.

Is het oké om aan te nemen dat fast-forward betekent dat alle commits opnieuw worden afgespeeld op de doelbranch en dat de HEADis ingesteld op de laatste commit op die branch?


Antwoord 1, autoriteit 100%

Als je een commit probeert samen te voegen met een commit die je kunt bereiken door de geschiedenis van de eerste commit te volgen, vereenvoudigt Git de dingen door de aanwijzer naar voren te verplaatsen, omdat er geen afwijkend werk is om samen te voegen – dit wordt een “snel vooruitspoelen” genoemd. .”

Voor meer informatie: http://git -scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

Op een andere manier,

Als Master niet is afgeweken, in plaats van een nieuwe commit te maken, zal git
wijs master gewoon naar de laatste commit van de feature branch. Dit is een “snel vooruitspoelen”.

Er zal geen “merge-commit” zijn in snel vooruitspoelende merge.


Antwoord 2, autoriteit 34%

In Git betekent “snel vooruitspoelen” het bijwerken van de HEAD-aanwijzer op zo’n manier dat zijn nieuwe waarde een directe afstammeling is van de vorige waarde. Met andere woorden, de eerdere waarde is een ouder, of grootouder, of grootouder, …

Fast forwarding is niet mogelijk wanneer de nieuwe HEADzich in een afwijkende staat bevindt ten opzichte van de stream die u wilt integreren. Je zit bijvoorbeeld op masteren hebt lokale commits, en git fetchheeft nieuwe upstream commits in origin/mastergebracht. De branch wijkt nu af van zijn upstream en kan niet snel worden doorgestuurd: je masterHEADcommit is geen voorouder van origin/masterHEAD. Om eenvoudigweg masterte resetten naar de waarde van origin/masterzou je lokale commits weggooien. De situatie vereist een rebase of samenvoeging.

Als je lokale mastergeen wijzigingen heeft, kan het snel worden doorgestuurd: eenvoudig bijgewerkt om naar dezelfde commit te verwijzen als de laatsteorigin/master. Meestal zijn er geen speciale stappen nodig om snel vooruit te spoelen; het wordt gedaan door mergeof rebasein de situatie dat er geen lokale commits zijn.

Is het oké om aan te nemen dat fast-forward betekent dat alle commits opnieuw worden afgespeeld op de doelbranch en dat de HEAD is ingesteld op de laatste commit op die branch?

Nee, dat heet rebasen, waarvan fast-forwarding een speciaal geval is als er geen commits zijn om opnieuw af te spelen (en de doelbranch heeft nieuwe commits, en de geschiedenis van de doelbranch is niet herschreven, zodat alle commits op de doelbranch de huidige als voorouder hebben.)

Other episodes