GIT Command Cheat Sheet

Aide mémoire des commandes de bases de GIT

Jérémy 🤘
Jérémy 🤘

Concepts de base

  • main: branche par défaut
  • origin: destination par défaut
  • HEAD: branche courante
  • HEAD^: parent de HEAD
  • HEAD~4: arrière-arrière grand-parent de HEAD

Configuration

Configurer le nom et l'email qui sera rattaché à vos commits et tags

Copier
$ git config --global user.name "Jérémy"
$ git config --global user.email "my.email@gmail.com"
$ git config --global user.name "Jérémy"
$ git config --global user.email "my.email@gmail.com"

Commencer un projet

Créer un repo local (sans <directory>, initialise le dossier courant)

Copier
$ git init <directory>
$ git init <directory>

Clôner un repo distant

Copier
$ git clone <url>
$ git clone <url>

Faire des changements

Ajouter un fichier modifié

Copier
$ git add <file>
$ git add <file>

Ajouter tous les fichiers modifiés

Copier
$ git add .
$ git add .

Commiter tous les fichiers ajoutés

Copier
$ git commit -m "commit message"
$ git commit -m "commit message"

Ajouter et commiter tous les fichiers modifiés

Copier
$ git commit -am "commit message"
$ git commit -am "commit message"

Branches

Lister toutes les branches locales. Ajouter le drapeau -r pour n'afficher que les branches distantes et -a pour lister toutes les branches

Copier
$ git branch
$ git branch

Créer une nouvelle branche

Copier
$ git branch <new-branch>
$ git branch <new-branch>

Changer de branche

Copier
$ git checkout <branch>
$ git checkout <branch>

Créer une nouvelle branche et passer sur celle-ci

Copier
$ git checkout -b <new-branch>
$ git checkout -b <new-branch>

Supprimer une branche mergée

Copier
$ git branch -d <branch>
$ git branch -d <branch>

Supprimer une branche, qu'elle soit mergée ou non

Copier
$ git branch -D <branch>
$ git branch -D <branch>

Créer un tag basé sur votre commit actuel (souvent utilisé pour créer une nouvelle version d'une application)

Copier
$ git tag <tag-name>
$ git tag <tag-name>

Merger

Merger une branche A dans une branche B.

Copier
A: O---O
        \
B:       O---O
A: O---O
        \
B:       O---O

Ajouter le drapeau --no-ff pour no-fast-forward merge

Copier
A: O---O       O
        \     /
B:       O---O
A: O---O       O
        \     /
B:       O---O
Copier
$ git checkout b 
$ git merge a
$ git checkout b 
$ git merge a

Merger et squasher (fusionner) tous les commits en un seul nouveau commit

Copier
$ git merge --squash a
$ git merge --squash a

Rebase

Rebaser une branche feature à partir de main (ou une branche) pour incorporer les changements de main. Evite les merge non nécessaire dans feature et garde un historique de commit propre.

Copier
feature: O---O-------O
              \
main:          O---O
feature: O---O-------O
              \
main:          O---O
Copier
feature: O---O-------O
                      \
main:                  O---O
feature: O---O-------O
                      \
main:                  O---O
Copier
$ git checkout feature
$ git rebase main
$ git checkout feature
$ git rebase main

Rebase intéractif afin de nettoyer les commit avant de rebase depuis main

Copier
$ git rebase -i main
$ git rebase -i main

Rebase intéractif des 3 derniers commits de votre branche courante

Copier
$ git rebase -i HEAD~3
$ git rebase -i HEAD~3

Annuler des choses

Déplace ou renomme un fichier du stage

Copier
$ git mv <existing_path> <new_path>
$ git mv <existing_path> <new_path>

Supprimer un fichier de l'espace de travail et du stage

Copier
$ git rm <file>
$ git rm <file>

Supprimer un ficher du stage uniquement

Copier
$ git rm --cached <file>
$ git rm --cached <file>

Afficher le contenu d'un commit précédent (lecture uniquement)

Copier
$ git checkout <commit_ID>
$ git checkout <commit_ID>

Annuler un commit (revient à l'état avant ce commit)

Copier
$ git revert <commit_ID>
$ git revert <commit_ID>

Revienir à un commit précédent et supprimer toutes les modifications du stage. Ajoutez le drapeau --hard pour aussi supprimer les fichiers (A UTILISER AVEC PRECAUTION)

Copier
$ git reset <commit_ID>
$ git reset <commit_ID>

Vérfier votre repo

Lister tous les nouveaux fichiers et les fichiers modifiés non commités

Copier
$ git status
$ git status

Afficher l'historique des commits

Copier
$ git log --oneline
$ git log --oneline

Afficher la différance de tous les nouveaux fichiers et les fichiers modifiés non commités

Copier
$ git diff
$ git diff

Afficher la différance entre 2 commits

Copier
$ git diff <commit1_ID> <commit2_ID>
$ git diff <commit1_ID> <commit2_ID>

Enregistrer les modifications temporaires

Enregistrer les fichiers modifés non commités. Pour ajouter les fichiers non ajoutés, utilisez le drapeau -u

Copier
$ git stash
$ git stash

Comme au dessus mais avec un commentaire

Copier
$ git stash save "comment
$ git stash save "comment

Stasher partiellement, un fichier, un ensemble de fichiers ...

Copier
$ git stash -p
$ git stash -p

Lister tous les stash

Copier
$ git stash list
$ git stash list

Appliquer un stash sans le supprimer

Copier
$ git stash apply
$ git stash apply

Appliquer le stash de l'index 2, puis le supprimer le la liste. Sans stash@{n} au pop, le stash le plus récent sera appliqué

Copier
$ git stash pop stash@{2}
$ git stash pop stash@{2}

Afficher un résumé de la différance du stash 1. Utilisez le drapeau -p pour afficher la différance complète

Copier
$ git stash show stash@{1}
$ git stash show stash@{1}

Supprimer le stash de l'index 1. Sans stash@{n} au delete, le dernier stash sera supprimé

Copier
$ git stash drop stash@{1}
$ git stash drop stash@{1}

Supprimer tous les stash

Copier
$ git stash clear
$ git stash clear

Synchronisation

Ajouter une connextion distante au repo

Copier
$ git remote add <alias> <url>
$ git remote add <alias> <url>

Afficher toutes les connexions distantes. Utilisez le drapeau -v pour voir les URLs

Copier
$ git remote
$ git remote

Supprimer une connexion

Copier
$ git remote remove <alias>
$ git remote remove <alias>

Renommer une connexion

Copier
$ git remote rename <old> <new>
$ git remote rename <old> <new>

Récupérer toutes les branches à partir de la connexion distante (sans merge)

Copier
$ git fetch <alias>
$ git fetch <alias>

Récupérer une branche spécifique

Copier
$ git fetch <alias> <branch>
$ git fetch <alias> <branch>

Récupérer la copie distante sur votre branche courante et merge

Copier
$ git pull
$ git pull

Récupérer et rebaser vos changements devant les nouveaux changements du repo distant (plus propre et permet d'avoir un historique linéaire)

Copier
$ git pull --rebase <alias>
$ git pull --rebase <alias>

Publie tous vos commits de toutes les branches vers la connexion distante

Copier
$ git push <alias>
$ git push <alias>

Publie vos commits d'une branche vers la connexion distante (pour faire une pull request)

Copier
$ git push <alias> <branch>
$ git push <alias> <branch>

Source