Fork me on Framagit.org

Visualisation des concepts Git avec D3

Ce site est conçu pour vous aider a comprendre visuellement les bases d'un projet git. C'est une traduction du site Explain-git-with-d3 sur Github. J'espere que cela vous sera utile.

L'ajout de fichier avec la commande "git add" pour préparer le commit n'est pas couvert par ce site. Dans chaque exemple, faites comme ci vous avez ajouté les fichiers et qu'ils sont prêts à être commité. Si vous avec besoin de comprendre la commande add, je vous propose de lire Les Bases de Git.

Chaque exercice est réparti en fonction de la commande git listée ci-dessous.

Commandes de Base

git commit git branch

Annuler des Commits

git reset git revert

Fusionner les Branches

git merge git rebase

Dépôt distants

git fetch git pull

Nous partons du principe que vous savez comment ajouter vos fichiers avec la commande git add. Si ce n'est pas le cas, je vous invite à relire la documentation.

Imaginez que vos fichiers soient prêt à être valider et entrez git commit autant de fois que vous le souhaitez dans le terminal.

git tag name va appeler un nouveau tag appellé "name". Créer des tags crée juste un nouveau tag qui pointe vers le dernier commit à avoir été 'checkout".

Les tags peuvent être supprimés à l'aide de la commande git tag -d name (bientôt).

Tapez les commandes git commit et git tag jusqu'à comprendre le concept.

git branch nom va créer une branche qui s'appellera "nom". La création d'une branches crée juste un pointeur sur le commit courrant.

Les branches peuvent être supprimées avec la commande git branch -d nom.

Utilisez les commandes git commit et git branch autant que le cœur vous en dit pour comprendre ce concept.

git checkout a beaucoup d'utilisations, dont la principale est le changement de branches.
Par exemple pour changer de la branche master vers la branche dev, j'ecrirais git checkout dev. Ensuite, si je fais un git commit, regardez ce que ca fait... Essayez.

En plus de récuperer des branches, vous pouvez aussi récuperer des commit individuels... Essayez.
Faites un nouveau commit et tapez git checkout bb92e0e et regardez ce que ça fait.

Utilisez les commandes git commit et git branch autant que le cœur vous en dit pour comprendre ce concept.

Vous pouvez combiner les commandes git branch et git checkout en une seule commande en tapant git checkout -b branchname. Ceci créera la branche si elle n'existe pas et vous placera immédiatement dessus.

git reset va déplacer le HEAD de la branche courante sur le commit que vous souhaitez. Cela permet d'oublier les commits dont vous n'avez plus besoin.

Cette commande est normalement utilisé avec les options: "--soft", "--mixed" et "--hard". Les options soft et mixed permettent de garder les modifications des commmits supprimés par la commande reset. Puisque cette application ne premet pas d'afficher graphiquement le contenu des fichiers, l'option "--hard" sera appliquée par défaut sur ce site.

La référence "HEAD^" est habituellement utilisée avec la commande reset. "HEAD^" permet de désigner le premier parent du commit courant "HEAD". "HEAD^^" permet de désigner le grand parent du HEAD, et ainsi de suite. La syntaxe "HEAD~2" n'est pas supportée par ce site.

Attention à ne jamais utiliser la commande git reset pour supprimer les commits qui ont déjà été poussées et fusionnées sur le référentiel distant. Cela peut entrainer une désynchronsation de votre référentiel local avec le référentiel distant. Ne le faites pas à moins que vous ne sachiez vraiment ce que vous faites.

Pour annuler des commits que vous avez déjà poussés et partagés avec votre équipen vous ne pouvez utiliser la commande git reset. À la place, nous devons utiliser git revert.

git revert créera un nouveau commit qui annulera tout le travail qui a été fait dans le commit sur lequel vous souhaitez revenir.

git merge va créer un nouveau commit avec deux parents. Le commit résultat de la fusion contiendra tout le travail effectué dans les deux branches.

S'il n'y avait pas de divergence entre les deux commits, git effectuera une fusion de type "fast-forward". Pour visualiser ceci, placez vous sur la branche "ff", puis tapez la commande git merge dev.

git rebase prendra les commits sur cette branche et "déplacera" ceux-ci pour que leur nouvelle "base" soit le commit que vous spécifiez.

Observez bien les identifiants des cercles lorsqu'ils se déplacent pendant l'exercice.

La raison pour laquelle je mets "dépacera" entre double-quotes, et qu'en réalité le processus génère de nouveaux commits avec des identifiants complétement différents de ceux des anciens commmits et laisse les anciens commits où ils étaient. Pour cette raison, vous ne devez jamais rebaser les commits qui on déjà été partagées avec l'équipe avec laquelle vous travaillez.

git fetch mettera a jour tous vos "remote tracking branches" dans votre depot local. Les branches distantes suivies sont tagées en gris.

A git pull est un processus en deux étapes dont la premiere est un git fetch, et puis ensuite git merge de la branche distante associée à votre branche courante. Si vous n'avez pas de branche courante, le processus s'arrête après le fetch.

Si l'argument "--rebase" est passé comme ceci git pull --rebase, la seconde étape de la commande pull lancera un rebase à la place d'un merge. Ce comportement peut être activé par défaut avec la commande : git config branch.BRANCHNAME.rebase true.

Un git push touvera les commits que vous avez sur votre branche locale mais qui ne sont pas présents sur la branche du serveur origin et les envoie dans le référentiel distant.

Par défaut, tous les push doivent provoquer une fusion "fast-forward" sur le référentiel distant. S'il y a une divergence entre votre branche locale et la branche distante, votre commande push sera rejetée. Dans ce scénario, vous devez récupérer les modifications distante avec git pull et ensuite vous serez en mesurer de pousser vos modifications.

Un exemple simple d'utilisation de git reset est de completement restaurer votre dépôt local à son état d'origine.
Vous pouvez le faire en écrivant git reset origin/master.

Note : Cela ne supprime pas les fichiers non suivis, vous devrez les supprimer séparément avec la commande git clean -df.

Dans la situation ci-dessous, vous travaillez sur votre référentiel local et vous souhaitez recevoir la dernière version du code de la branche principale du serveur origin. Pour mettre à jour votre branche locale, vous pouvez le faire sans avoir à changer de branche!

Premièrement faites un git fetch, et ensuite tapez git rebase origin/master!

git branch -d est utilise pour supprimer les branches. J'ai pré-créé un tas de branches pour que vous les supprimiez dans l'exercice ci-dessous.

Faites ce que vous voulez dans cette espace libre.

Exemples Spécifiques

Ci-dessous, j'ai créé des scénarios concrets spécifiques que je trouve assez communs et utiles.