🌿 Git

Branches, rebase, stash, tags, bisect

Aide-mémoire

Git — Aide-mémoire

Configuration initiale

git config --global user.name  "Prénom Nom"
git config --global user.email "[email protected]"
git config --global core.editor "vim"
git config --global init.defaultBranch main
git config --global pull.rebase true          # rebase par défaut sur pull
git config --global push.autoSetupRemote true  # pousse la branche courante auto

Voir la config

git config --list --show-origin

Initialisation & Clonage

git init                              # Nouveau dépôt local
git init --bare /srv/repos/mon-repo   # Dépôt nu (serveur)
git clone https://github.com/user/repo
git clone [email protected]:user/repo    # Via SSH
git clone --depth 1 https://...       # Clone superficiel (1 commit)
git clone --branch dev https://...    # Cloner une branche spécifique

Workflow quotidien

git status                    # État du répertoire de travail
git diff                      # Diff non stagé
git diff --staged             # Diff stagé (avant commit)
git diff HEAD~1               # Diff avec le commit précédent

git add fichier.txt # Stager un fichier

git add -p # Stager interactivement (hunk par hunk) git add . # Stager tout git restore --staged fichier # Unstager

git commit -m "message"

git commit --amend # Modifier le dernier commit (message ou fichiers) git commit --amend --no-edit # Amend sans changer le message

git log --oneline --graph --all # Historique graphique compact

git log --author="Nom" --since="2024-01-01" git show abc1234 # Détail d'un commit git blame fichier.txt # Qui a écrit quoi

Branches

git branch                    # Lister les branches locales
git branch -a                 # Toutes (locales + remote)
git branch feature/ma-feature # Créer
git switch feature/ma-feature # Basculer (modern)
git switch -c feature/nouvelle # Créer + basculer
git branch -d feature/done    # Supprimer (si mergée)
git branch -D feature/force   # Supprimer (force)

Renommer

git branch -m ancien nouveau git push origin :ancien nouveau && git push --set-upstream origin nouveau

Comparer deux branches

git diff main...feature/dev # Ce qui est dans feature mais pas dans main git log main..feature/dev # Commits dans feature absents de main

Remote

git remote -v                          # Lister les remotes
git remote add origin [email protected]:user/repo
git remote set-url origin https://...  # Changer l'URL

git fetch --all --prune # Récupérer + supprimer les branches mortes

git pull # fetch + merge (ou rebase si configuré) git pull --rebase origin main

git push # Pousser la branche courante

git push -u origin ma-branche # Premier push + set upstream git push --force-with-lease # Force push sécurisé (vérifie le remote) git push origin :branche-a-supprimer # Supprimer une branche remote git push --tags # Pousser tous les tags

Merge & Rebase

# Merge
git merge feature/ma-feature          # Merge avec commit de merge
git merge --no-ff feature             # Toujours créer un commit de merge
git merge --squash feature            # Squash tous les commits en un seul

Rebase

git rebase main # Rebaser la branche courante sur main git rebase -i HEAD~5 # Rebase interactif sur les 5 derniers commits

Opérations dans l'éditeur : pick, reword, edit, squash, fixup, drop

Résolution de conflits

git mergetool # Outil graphique git checkout --ours fichier.txt # Garder notre version git checkout --theirs fichier.txt # Garder leur version git add fichier.txt && git merge --continue git merge --abort # Annuler le merge en cours

Stash

git stash                         # Sauvegarder les modifications non commitées
git stash push -m "WIP: feature"  # Stash nommé
git stash push -p                 # Stash interactif (hunk par hunk)
git stash list                    # Lister
git stash pop                     # Restaurer le dernier + supprimer
git stash apply stash@{2}         # Restaurer sans supprimer
git stash drop stash@{0}          # Supprimer un stash
git stash branch feature/nouveau  # Créer une branche depuis un stash

Tags

git tag                           # Lister les tags
git tag v1.0.0                    # Tag léger
git tag -a v1.0.0 -m "Release 1.0.0"  # Tag annoté (recommandé)
git tag -a v1.0.0 abc1234         # Taguer un commit passé
git push origin v1.0.0            # Pousser un tag
git push origin --tags            # Pousser tous les tags
git tag -d v1.0.0                 # Supprimer localement
git push origin :refs/tags/v1.0.0 # Supprimer remote

Annulation & Récupération

git restore fichier.txt           # Annuler les modifications non stagées
git restore --source HEAD~2 f.txt # Restaurer depuis un commit

git reset --soft HEAD~1 # Annuler commit, garder les fichiers stagés

git reset --mixed HEAD~1 # Annuler commit + unstage (défaut) git reset --hard HEAD~1 # Annuler commit + perdre les modifications ⚠️

git revert abc1234 # Créer un commit d'annulation (sûr sur branches partagées)

git revert HEAD~3..HEAD # Annuler les 3 derniers commits

Récupérer un commit perdu

git reflog # Historique de tous les mouvements HEAD git checkout abc1234 # Se positionner sur le commit perdu git branch rescue-branch # Créer une branche pour le sauver

Recherche

git grep "pattern"                         # Chercher dans les fichiers suivis
git log --all --grep="fix login"           # Chercher dans les messages de commit
git log -S "nom_de_fonction"               # Commits qui ont ajouté/supprimé ce texte
git log -G "regex"                         # Commits dont le diff match la regex
git bisect start                           # Démarrer la recherche binaire de régression
git bisect bad                             # Marquer comme mauvais
git bisect good v1.0.0                     # Marquer comme bon
git bisect run pytest tests/               # Automatiser la bisection
git bisect reset                           # Terminer

Sous-modules & Worktrees

# Sous-modules
git submodule add https://github.com/lib/lib libs/lib
git submodule update --init --recursive    # Initialiser après clone
git submodule foreach git pull origin main # Mettre à jour tous les sous-modules

Worktrees (plusieurs branches en parallèle)

git worktree add ../hotfix hotfix/bug-42 # Checkout dans un dossier séparé git worktree list git worktree remove ../hotfix

.gitignore

# OS
.DS_Store
Thumbs.db

Éditeurs

.vscode/ .idea/ *.swp

Dépendances

node_modules/ vendor/ __pycache__/

Build

dist/ build/ *.pyc *.class

Secrets ⚠️

.env *.pem *.key config/secrets.yml

Alias utiles (~/.gitconfig)

[alias]
  st    = status -sb
  lg    = log --oneline --graph --all --decorate
  oops  = commit --amend --no-edit
  undo  = reset --soft HEAD~1
  wip   = !git add -A && git commit -m "WIP"
  unwip = reset HEAD~1
  cleanup = !git branch --merged | grep -v main | xargs git branch -d
🔧 Ouvrir tools.rdr-it.com — application complète →

Plus de 40 outils AdminSys gratuits · SSL · DNS · Docker · Nginx · SSH · Mermaid · et plus