La théorie des graphesappliquée à gitGeoffrey Bachelet@ubermuda
View Slide
Königsberg
ez pzLeonhardEuler
PontMasse de terre
ArêteNoeudgraphe
1 234
A B EDC
A B EDCNoeuds
A B ECArêtesD
A B EDCGraph orienté
Atteignabilité
AtteignabilitéC est atteignable depuis EA B EDC
AtteignabilitéNOPEA B EDC
A BDECFD n'est pas atteignable depuis FAtteignabilité
$ git branch* master$ ls .git/refs/heads/master$ cat .git/refs/heads/master58bd01cded7904f1596cb12aac1d3e0e8ae6b558
$ git log --format="%H"6465a2cd4d6d3b0a0a62588eeb5b798bb7d31a717d1d4dabc49854a080720036173144647656509417a59ceda9b2806e2a135df039506d1ec1a976e6...
$ echo "6465a2cd" > .git/refs/heads/foo
$ git branch* masterfoo
A BDECFmasterfoo
A BDECFmasterfooAtteignabilité !
Rappel• Une branche• Un tag• HEAD : commit actuel à un instant TRéférences
Merge
A BDECFmasterfooHEAD$ git merge master
A BDECFmasterfoo$ git merge masterHEAD
A BDECFmasterGfoo$ git merge masterHEAD
A BDECFmasterfooGfoo$ git merge masterHEAD
A BDECFmasterfooGAtteignabilité ! HEAD
fast-forward
A B C EDfoomasterFHEAD$ git merge foo
A B C EDfoomasterF$ git merge fooAtteignableHEAD
C EDfoomasterFmasterA B$ git merge fooHEAD
cherry-pick
A BDECFmasterfoo$ git cherry-pick FHEAD
masterfooF'A BDECFfoo$ git cherry-pick FHEAD
rebase
$ git rebase masterA BDECFmasterfooHEAD
Bmerge baseADECFmasterfoo$ git rebase masterHEAD
merge basepremier ancêtre communAtteignable !
A BDECFmasterfooAtteignable ! HEAD
A BDECFmasterfooC'$ git rebase masterHEAD
A BDECFmasterfooC' D'$ git rebase masterHEAD
A BDECFmasterfooC' D'foo$ git rebase masterHEAD
A BDECFmasterC' D'foo$ git rebase masterHEAD
A BDECFmasterC' D'fooHeadless$ git rebase masterHEAD
Headlessnon-atteignable depuis une référencesusceptible d'être "garbage collecté"
A BDECFmasterC' D'foo$ git reset --hard DfooA BDECF C' D'HEAD
$ git reflog...384b39c [email protected]{10}: merge feature/bdl-auth: Fast-forward84541fe [email protected]{11}: checkout: moving from feature/bdl-auth to384b39c [email protected]{12}: rebase finished: returning to refs/heads/f384b39c [email protected]{13}: rebase: Add auth bundle
fetch
A B C DmasterA Bmasteroriginlocalorigin/master
localA B C DmasterA Bmasteroriginorigin/masterFETCH !
A B C DmasterA BmasterC Dorigin/masteroriginorigin/masterlocal
push
A BmasterA BmasteroriginlocalCD
A BmasterA BmasteroriginpushDDlocalC
A BmasterA BmasterA BA BoriginlocalCDDPASATTEIGNABLE
A BmasterA BmasterA BA BoriginlocalCDDNOPE
Atteignabilité.
https://speackerdeck.com/ubermudahttps://think-like-a-git.net/Geoffrey Bachelet@ubermuda