🌿 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