Je tape git des dizaines de fois par jour. Au fil des années, quelques alias se sont imposés. Ils vont dans la section [alias] du fichier ~/.gitconfig :
[alias]
# État court, avec la branche et son avance/retard sur le distant
st = status -sb
# Historique en graphe, une ligne par commit
lg = log --graph --abbrev-commit --pretty=format:'%C(yellow)%h%Creset %s %C(cyan)(%cr)%Creset %C(green)<%an>%Creset%C(auto)%d%Creset'
# Ajoute les changements indexés au dernier commit, sans changer le message
oups = commit --amend --no-edit
# Annule le dernier commit en gardant les modifications indexées
annule = reset --soft HEAD~1
# Force-push sans écraser le travail d'un collègue
pousse = push --force-with-lease
# Supprime les branches locales déjà fusionnées (sauf main/master)
nettoie = "!git branch --merged | grep -vE '^\\*|main|master' | xargs -r git branch -d"
Ou directement en ligne de commande
Chaque alias peut aussi s'ajouter avec git config, pratique dans un script d'installation :
git config --global alias.st "status -sb"
git config --global alias.oups "commit --amend --no-edit"
git config --global alias.annule "reset --soft HEAD~1"
git config --global alias.pousse "push --force-with-lease"
Pourquoi --force-with-lease plutôt que --force ?
--force écrase la branche distante quoi qu'il arrive. --force-with-lease refuse si quelqu'un a poussé entre-temps des commits que vous n'avez pas récupérés. Le résultat est le même dans 99 % des cas, mais celui qui reste évite une sueur froide.
Et sous PowerShell ?
Les alias Git fonctionnent partout. Seul nettoie dépend de grep et xargs : sous Windows sans Git Bash, voici l'équivalent PowerShell :
git branch --merged |
Where-Object { $_ -notmatch '^\*|main|master' } |
ForEach-Object { git branch -d $_.Trim() }
git switch -revient sur la branche précédente, commecd -pour les dossiers. Pas besoin d'alias pour celui-là.