Six alias Git qui me font gagner du temps chaque jour

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, comme cd - pour les dossiers. Pas besoin d'alias pour celui-là.