git config --global core.editor "code --wait" # VS Code
git config --global core.editor "nano" # Nano
git config --global core.editor "vim" # Vimgit checkout main
git checkout -b nouvelle-branche # depuis la branche courante
git checkout -b nouvelle-branche origin/branche-source # depuis une branche distante, nouveau nom + tracking auto
git checkout --track origin/branche-source # depuis une branche distante, même nom + tracking autogit branch # branches locales
git branch -r # branches distantes
git branch -a # toutes (locales + distantes)git branch -m ancien-nom nouveau-nom # depuis une autre branche
git branch -m nouveau-nom # si on est dessus
git push origin --delete ancien-nom # supprimer l'ancienne distante
git push origin -u nouveau-nom # pousser la nouvelle + lier le tracking
git branch --set-upstream-to=origin/nouveau-nom nouveau-nom # mettre à jour le tracking local
⚠️ Si des collègues ont l'ancienne branche en local, ils doivent mettre à jour leur tracking :git fetch origin --prune git branch -u origin/nouveau-nom nouveau-nom
git branch -d nom-branche # locale, refuse si pas mergée
git branch -D nom-branche # locale, force la suppression
git push origin --delete nom-branche # distantegit fetch origin # mettre à jour les refs distantes
git fetch origin nom-branche:nom-branche # mettre à jour une branche locale depuis la remote sans checkout
git fetch origin --prune # nettoie les références aux branches distantes suppriméesgit tag nom-tag # tag léger sur le commit courant
git tag -a nom-tag -m "message du tag" # tag annoté (recommandé, avec message)
git tag -a nom-tag <hash> -m "message" # tag annoté sur un commit spécifique
git tag -a nom-tag # ouvre l'éditeur pour un message long
git push origin nom-tag # pousser un tag spécifique
git push origin --tags # pousser tous les tags locauxTag léger = simple pointeur sur un commit. Tag annoté = objet Git complet avec auteur, date et message — recommandé pour les releases.
git tag -d nom-tag # local
git push origin --delete nom-tag # distant
git fetch --prune --prune-tags # synchronise les suppressions de tags distants en local (Git 2.17+)git commit -m "Titre du commit" -m "Description plus détaillée sur plusieurs lignes si besoin."
git commit # ouvre l'éditeur pour rédiger titre + description librementChaque
-majoute un paragraphe séparé par une ligne vide. Titre court (~50 caractères), description plus longue pour expliquer le pourquoi. Pour annuler : quitte l'éditeur sans sauvegarder (message vide →Aborting commit due to empty commit message).
git checkout main
git checkout -b integration # branche cible créée depuis maingit merge branche1
git merge branche2 --no-edit # sans ouvrir l'éditeur pour le message
git merge branche3 --no-ff # force un commit de merge même en cas de fast-forwardgit merge branche1 --squash
git merge branche2 --squash
git commit -m "feat: integration des branches"
--squashapplique les changements en staging sans créer de commit de merge. Résultat : un seul commit final propre, mais l'historique des branches sources n'apparaît plus dans le log.
git merge origin/ma-branche
git merge origin/ma-branche --squash --no-editgit status # voir les fichiers en conflit
git diff --name-only --diff-filter=U # version concise
git add <fichier> # marquer le conflit comme résolu après édition manuelle
git merge --continue # reprendre le merge après résolutiongit checkout --theirs chemin/vers/fichier # prend la version de la branche mergée
git checkout --ours chemin/vers/fichier # prend la version de la branche courante
git add chemin/vers/fichier # indispensable : marque le conflit comme résolu
--ours= la branche qui reçoit le merge (celle sur laquelle tu es).--theirs= la branche que tu merges (locale ou distante). Ces notions ne sont pas liées à local/distant mais au sens du merge en cours.
git checkout --theirs .
git add .Ou cibler certains types de fichiers :
git checkout --theirs -- '*.png' '*.pdf'
git add '*.png' '*.pdf'git diff --name-only --diff-filter=U | grep -E '\.(png|jpg|bin|pdf)$' | xargs git checkout --theirs --
git diff --name-only --diff-filter=U | grep -E '\.(png|jpg|bin|pdf)$' | xargs git addgit commit # finaliser le merge après résolution
git merge --abort # annuler le merge en cours et revenir à l'état d'avant:q! # quitter vim sans sauvegarder → annule le commit de merge en cours
git reset --soft HEAD~1 # annule le dernier commit, garde les modifications en staging
git reset --hard HEAD~1 # annule le dernier commit, supprime les modifications
git merge --abort # annule un merge en cours avec conflits non résolusgit reflog # affiche l'historique de tous les mouvements de HEAD
git reset --hard HEAD@{2} # restaure l'état avant les resets (via ref reflog)
git reset --hard <hash> # ou via le hash du commit cibleLe reflog est disponible en local uniquement, conservé ~90 jours par défaut.
git checkout -- nom-fichier # restaure le fichier à l'état du dernier commit
git restore nom-fichier # idem, syntaxe moderne (Git 2.23+)
git restore . # restaure tous les fichiers modifiés
⚠️ Les modifications non commitées sont perdues définitivement, le reflog ne peut pas les récupérer.
git -C chemin/vers/worktree status # git status depuis le repo parent
git -C chemin/vers/worktree log --oneline # fonctionne avec n'importe quelle commande git
git -C chemin/vers/worktree diffgit log --oneline --graph --all # vue graphique de toutes les branches et commits
git diff HEAD~1 # vérifier ce qu'a changé le dernier merge
git diff branche1 branche2 # comparer deux branches locales
git diff branche1 origin/branche2 # comparer une locale et une distante
git diff origin/branche1 origin/branche2 # comparer deux branches distantes
git log branche1..branche2 # commits présents dans branche2 mais pas dans branche1
git log branche1...branche2 # commits qui diffèrent dans les deux sens- Même si les branches partent du même commit, des conflits peuvent survenir si deux branches modifient les mêmes lignes.
- Teste/compile après chaque merge pour isoler les régressions.
--squashmasque l'historique des branches sources dans le log — choix à faire en connaissance de cause.git fetch --prunenettoie les références aux branches distantes supprimées.