Git est un logiciel libre de versioning; chaque projet est un dépôt. Cet outil permet le travail collaboratif sur un même code. Il est notamment utilisé par la plateforme open source GitHub.

Vocabulaire :
Dépôt : Il s’agit d’un endroit où l’on va stocker les versions du code. Les dépôts peuvent être comparés à des projets.

Validation ou commit : Il s’agit d’une version du projet à un instant t.

Push : Permet l’envoi d’un ou de plusieurs commits à un dépôt.

Pull : Permet le téléchargement des commits sur un dépôt.

Fork : Le fork permet à toute personne ayant accès au dépôt contenant le projet de le cloner et d’y effectuer ses propres modifications.

Tree : Contient un commit, il décrit l’arborescence des sources, un objet arbre pointe vers plusieurs commits parents.

Branche : Chaque commit connaissant ses parents, il est alors possible de faire travailler deux équipes sur deux branches différents (la branche principal est master). Cela permet de créer deux versions du projet en parallèle. Il est ensuite possible de fusionner les deux branches pour mettre en commun le travail de chacun. Exemple : une branche dev et une branche production (master). Une fois que un commit de la branche dev est validé, les deux branches sont fusionnées et la branche principale possède donc les nouvelles fonctionnalités.

Merge : Il s'agit de la fusion de deux branches.

Stash : Est un espace de stockage local qui contient des modifications qui ne sont pas encore commit. Utile par exemple lors d'un changement de branche avec des modifications en attente.

Rebase : Permet de réécrire une partie de l'historique des commits.

cherry-pick : Permet d'ajouter un commit à une autre branche sans avoir à fusionner toute la branche du commit.

Commandes impératives :

Initialiser un projet git :

git init

Lister les globals de configuration :

git config –list

Configuration du pseudo :

git config –global user.name "votre_nom"

Configuration du mail :

git config –global user.email "[email protected]"

Statut des fichiers modifiés :

git status

Premier commit :

git add .
git commit –m "initial commit"

Commits suivants :

git add chemin_vers_mon_fichier
git commit -m "message du commit"

Modifier le commit précédent :

git commit --amend

Voir l'historique des commits :

git log

Voir l'historique des commits (sur une ligne) :

git log --oneline

Voir les branches sous la formes d'un schéma :

git lg

Voir les différences par rapport au dernier commit :

git diff

Faire revenir un fichier à un ancien commit :

git checkout <commit> <fichier>

Revenir à un commit précédent (en ajoutant les fichiers modifiés au staging) :

git reset <commit>

Revenir à un commit précédent (en supprimant les fichiers du staging) :

git reset <commit> --hard

Créer un commit inverse à celui indiqué :

git revert <commit>

Rebase d'une branche :

git checkout <commit>
git rebase master

Rebase intéractif :

git rebase -i <commit>

Le rebase intéractif fonctionne avec un système de scipt. Lors de l'exécution de la commande, une nouvelle fenêtre est ouverte et il est alors possible d'effectuer ces actions sur chaque commit :

  • pick : Utilise le commit
  • rework : Permet de modifier le message du commit.
  • edit : Permet de modifier le message du commit et son contenu.
  • squash : Fusionne le commit au précédent.
  • fixup : Comme squash mais permet de modifier le message du nouveau commit.
  • exec : Permet d'exécuter une commande shell.

Supprimer un fichier du répertoire de travail et de l’index :

git rm nom_du_fichier

Lister les branches :

git branch

Créer une branche :

git branch nom_de_ma_branch

Changer de branche :

git checkout nom_de_ma_branch

Suppression d’une branche :

git branch -d correctif

Ajout des modifications de la branche dev à la branche master :

git checkout master
git merge dev

Cherry-pick un commit sur la branche master :

Le cherry-pick permet de fusionner un commit d'une branche 1 sur une branche 2. Cela permet de faire avancer la branche 1 avec un commit de la branche 2 sans pour autant récupérer tous les commit de la branche 2.

git checkout master
git cherry-pick c90fd66

Mise en place d'un stash :

git stash

Mise en stash même des fichiers non traqué :

git stash -u

Liste des stashs :

git stash list

Voir les modifications d'un stash :

git stash show stash@{0} [-p]

Appliquer un stash :

git stash apply stash@{0}

Supprimer un stash :

git stash drop stash@{0}

Appliquer un stash en le supprimant :

git stash pop stash@{0}

Lister les dépôts distants déjà configurés :

git remote -v

Ajout d’un dépôt distant :

git remote add nomDuRemote https://github.com/user/repo.git

Suppression d’un dépôt distant :

git remote rm nomDuDepot

Récupération des modifications de la branche courante sur un dépôt distant sans merge (création d’une nouvelle branche) :

git fetch VotreRemote

Récupération des modifications de la branche courante sur un dépôt distant :

git pull VotreRemote

Envoyer ses commits vers le dépôt distant :

git push VotreRemote Branche

Cloner un dépôt distant :

git clone git://github.com/user/repo.git

Documentation supplémentaire :

https://git-scm.com/book/fr/v1/Les-bases-de-Git-Travailler-avec-des-d%C3%A9p%C3%B4ts-distants

https://git-scm.com/documentation