
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érentes (la branche principale 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 qu’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 forme 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 interactif
git rebase -i <commit>
Le rebase interactif fonctionne avec un système de script. 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 commits 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és
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