🔖 Voir aussi
- Les shorts de DeliciousInsights
- https://github.com/dictcp/awesome-git
- https://jvns.ca/blog/2023/11/01/confusing-git-terminology/
- https://jvns.ca/blog/2024/01/26/inside-git/
Initialise un dépôt dans un dossier (vide ou non)
git init
Récupère une copie d’un dépôt.
git clone ssh://<user>@<server>:<port>/<path>
Affiche le statut d’un dossier versionné avec Git
git status
Liste les branches disponibles localement
git branch
# Pour passer sur une autre branche existant localement
git checkout nomdelabranche
# Pour passer sur une autre branche develop n’existant pas encore localement mais seulement sur l’origine distante
git fetch
git checkout -b nomdelabranche origin/nomdelabranche
Affiche les différences dans le dossier de travail courant par rapport au dernier commit (ou d'autres commits).
git diff
git diff --shortstat
# Affiche la liste des fichiers modifiés entre deux commits
git diff a6a3a3d9fc507ddf2aeee189b7b34daeb897652a 56c46aeec883c36389c69fc0f17197e48474af1f --name-only
Ignorer les caractères espaces (whitespaces) : git diff -w
Affiche le journal des commits
git log
- Condensé en une ligne :
git log --oneline
- Décoré :
git log --graph --decorate --oneline
- Statistiques :
git log --stat
- Sur un fichier en particulier
git log <fichier>
- Sur un auteur
git log --author="nomdelauteur" --oneline --shortstat
- Toutes les actions effectuées
git reflog
Ajoute des fichiers à un commit. Avec un “.” en paramètre, ajoute tous les fichiers du dossier courant
git add .
Sinon fichier par fichier
git add index.html
git add styles.css
Valide dans un commit les fichiers ajoutés (par add par exemple) et demande une description. (En ligne de commande ouvre un éditeur de texte pour donner la description texte)
git commit
L’option --amend
permet de modifier le dernier message de commit, ensuite il "suffit" de git push --force
git commit --amend
Envoie les derniers commits sur le dépôt distant s’il est configuré, dans la branche active
git push
Récupère les derniers commits du dépôt distant.
git pull
git pull --rebase
“Annule” un commit mais n’efface pas l’historique. Crée un nouveau commit résultant de l’annulation des changements introduits par le commit ancien que l’on souhaite annuler.
git revert HEAD
Réinitialise tout ou certains fichiers.
Caution
Ne pas confondre avec revert
: attention on peut perdre des modifications non versionnées.
git reset
git reset <fichier>
git reset <commit>
git reset HEAD
git reset --hard
git reset --hard origin/<labranche>
git reset --soft HEAD~1 # quand on a foiré son dernier commit 🎉
Pour supprimer un fichier déjà versionné/tracké, mais qui a par exemple été ajouté à .gitignore
git rm --cached .env
Nettoie le dossier de travail.
# Annonce ce qu’il va faire (sans le faire)
git clean -n
# Retire effectivement les fichiers non versionnés
git clean -f
Autre options -df
: seulement répertoire courant ; -xf
: même les fichiers ignorés habituellement.
Récupère un état global du dépôt (ou un fichier précis) en précisant soit le nom du commit (vu avec git log) soit le nom de la branche.
git checkout master
git checkout 11b5cf99
git checkout assets/css/styles.min.css # Un fichier en particulier
Télécharge des informations sur les branches/tags depuis un repo.
# Récupère la branche develop depuis l’origin (distante)
git fetch origin develop
Manipule les URLs de repos distants.
# Ajoute une remote
git remote add <nom> <url>
# Change la _remote_ (distante)
git remote set-url origin <url>
Fusion !
Retrouver qui a modifié quoi.
# Sur un fichier, de la ligne 85 à 90 :
git blame css/styles.less -L 85,90
3 endroits différents stockent la configuration par ordre de priorité descendante
<repo>/.git/config – Config spécifique du dépôt
~/.gitconfig – Config de l’utilisateur (là où est stocké --global)
/etc/gitconfig – Config générale du système
Lister la config : git config --list
Modifier la config :
git config --global user.name <name>
git config --global user.email <email>
git config --system core.editor <editor>
Edition de toute la configuration : git config --global --edit
Le fichier .gitignore
placé à la racine ou dans un sous-dossier permet d’ignorer des fichiers à versionner, par exemple logs, fichiers de configuration, dossiers uploads.
Exemple :
.env # ignore tous les fichiers .env, où qu'ils soient
/.htaccess # ignore le fichier .htaccess à la racine
/node_modules/ # ignore le dossier node_modules à la racine
node_modules/ # ignore tous les dossiers nommés “node_modules”
*.txt # ignore tous les fichiers txt
🎬 YouTube : Ignorer des fichiers avec Git, par Delicious Insights