Git
Configuration
Configuration de l'identité
git config --global user.name "John Doe"
git config --global user.email "john.doe@example.com"
Stockage des identifiants
Mise en cache pour une durée déterminée (ici, 12 heures)
git config --global credential.helper 'cache --timeout 43200'
Stockage permanant dans un fichier
git config --global credential.helper 'store --file ~/.git-credentials'
Annulation du stockage des identifiants
git config --global --unset credential.helper
Créer un alias de commande Git
git config --global alias.rename 'branch -m'
Changer l'éditeur de texte par défaut
git config --global core.editor "vim"
Opérations
Revenir à l'état du dernier commit
git reset --hard
Supprimer le dernier commit
git reset --hard HEAD^
Supprimer les n derniers commits
git reset --soft HEAD~n
Pour annuler les modifications, remplacer soft par hard.
Puis pour posser la suppression sur le dépôt distant :
git push origin +HEAD
Depuis un dépôt “bare”, remplacer –hard par –soft.
Restaurer des fichiers depuis un commit
git checkout c5f567 -- file1/to/restore file2/to/restore
Pour restaurer les fichier avant le commit (ici 1 commit avant) :
git checkout c5f567~1 -- file1/to/restore file2/to/restore
Fusionner les derniers commits
git rebase -i a7cc4794a8802708b2eaa75debb40c993f0fa958
L'ID est celui du commit qui précède le dernier membre de la fusion
OU
git rebase -i --root main
Combiner tous les commits en un seul
git rebase --root -i
Puis remplacer toutes les occurrences de pick par squash sauf la première.
Sous vim, il est possible de faire :
:%s/pick/squash/g
Changer le commentaire du dernier commit
git commit --amend -m "Nouveau commentaire"
Changer l'auteur du dernier commit
git commit --amend --author="Benjamin Féron <50001976+benjamin-feron@users.noreply.github.com>"
Changer l'auteur de tous les commits selon un filtre
git filter-branch -f --env-filter '
WRONG_EMAIL="wrong@email.com"
NEW_NAME="New Name"
NEW_EMAIL="new@email.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
Renommer une branche
Branche courante
git branch -m <newname>
Autre branche
git branch -m <newname> <newname>
Supprimer une branche distante
git push --delete origin v2.0
Pousser une branche locale
git push -u origin feature_branch_name
Pousser toutes les branches
git push --all origin
Re-synchroniser la branche courante avec la branche distante lorsqu'un simple pull ne suffit pas
git pull --rebase origin master
Supprimer un tag
Localement
git tag -d <tagname>
A distance
git push --delete origin <tagname>
Supprimer tous les tags
git tag | xargs git tag -d
Voir le nombre de contributions par auteur
Avec tous les emails utilisés
git shortlog -nse
Avec emails combinés
git shortlog -ns