L'auteur, initialement méconnaissant git cherry-pick comme simple application d'un patch, explore réellement son fonctionnement, révélant un processus plus nuancé impliquant un "merge à trois volets". La méconception est apparue lors de la tentative de résolution des conflits de fusion en utilisant la méthode de patch, qui a échoué, contrairement au comportement attendu de git cherry-pick. Des recherches supplémentaires dans le code source de git ont révélé que cherry-pick utilise un merge à trois volets, un concept inconnu de l'auteur à l'époque. Cela a incité à explorer les merges à trois volets, qui, en substance, consistent à fusionner deux fichiers en les comparant à leur version originale (la base). Ce concept s'étend à l'application des patches dans git, où les versions du fichier avant et après le commit, ainsi que le fichier actuel, constituent les trois versions utilisées dans le merge. Cherry-pick, rebase et revert utilisent tous cette stratégie de merge à trois volets, se distinguant principalement par l'ordre et l'interprétation des versions de base et cible.
L'auteur forge le terme "patch à trois volets" pour décrire cette technique, mettant en avant son avantage de fournir plus de contexte pour la fusion par rapport aux patches traditionnels. Alors que git apply gère généralement les patches traditionnels, il offre également un drapeau --3way pour effectuer des merges à trois volets. Cette exploration met en évidence l'intelligence de l'utilisation des merges à trois volets pour appliquer des patches dans git, offrant une approche unifiée pour diverses opérations tout en restant transparent pour les utilisateurs qui peuvent se contenter du concept familier d'"application d'un patch". L'auteur reconnaît la complexité de la fusion dans git, évoquant des concepts tels que les merges récursifs et les algorithmes de fusion multiples, avec le livre "Building Git" suggéré pour une exploration plus approfondie.
Enfin, l'auteur exprime son admiration pour la conception élégante du mécanisme de patching de git, louant son intuitivité et son efficacité.
jvns.ca
How git cherry-pick and revert use 3-way merge
Create attached notes ...
