À faire
bash git switch main git merge feature-contact git branch -d feature-contact
git mergeUne fois votre feature-contact validée, vous l’intégrez dans main. Règle d’or :
On se place sur la branche qui reçoit, puis on appelle la branche à fusionner.
git switch maingit merge feature-contactÀ faire
bash git switch main git merge feature-contact git branch -d feature-contact
À éviter
bash git switch feature-contact git merge main # ← inverse !
main n’a pas bougé depuis la création de feature-contact → Git déplace le pointeur.
Message :
Updating a1b2c3d..e4f5a6bFast-forward contact.html | 1 +main et feature-contact ont tous deux avancé → Git crée un commit de fusion M.
Historique :
git log --oneline --graph --all# * a1b2c3d (HEAD -> main) Merge branch 'feature-contact'# |\# | * e4f5a6b feat: formulaire# * | c2d3e4f C2: hotfix typo# |/# * b0c9d8e C1| Option | Effet | Usage |
|---|---|---|
git merge --ff-only |
Refuse si pas fast-forward | CI qui exige linéaire |
git merge --no-ff |
Force un commit de merge même si fast-forward possible | Garder trace de la feature |
git merge --squash |
Écrase tous les commits de la branche en un seul | Feature à 15 commits → 1 commit propre sur main |
git switch maingit merge --no-ff feature-contact -m "Merge feature/contact"git merge --squash feature-logingit commit -m "feat: add login (squashed)"Commandes à exécuter
Utile quand feature-login a 15 commits “wip” :
git switch maingit merge --squash feature-logingit status# Changes to be committed: login.html, auth.jsgit commit -m "feat: add login"Historique main reste propre (1 commit au lieu de 15).
git merge --abort # en plein conflit, tout annulegit merge --continue # après avoir résolu et git addConflit = même ligne, même fichier, deux versions différentes.
main: <h1>HashCode Workshops</h1>feature-titre: <h1>Académie technique</h1>→ Git ne peut choisir → vous tranchez.<<<<<<< HEAD<h1>Bienvenue sur HashCode Workshops</h1>=======<h1>Bienvenue sur notre académie technique</h1>>>>>>>> feature-titre| Marqueur | Signification |
|---|---|
<<<<<<< HEAD |
Début version courante (main) |
======= |
Séparateur |
>>>>>>> feature-titre |
Fin version entrante |
Voir l’état :
git status# You have unmerged paths.# Unmerged paths:# both modified: index.html
git diff --check # repère les marqueurs oubliésCommandes à exécuter
index.html dans VS Code<h1>Bienvenue sur HashCode Workshops — Académie technique</h1><<<<<<<, =======, >>>>>>>)git add index.htmlgit commit -m "Merge feature-titre : resolve title conflict"# ougit merge --continueVérifiez :
git log --oneline -2git status # cleanCommandes à exécuter
git mergetoolLance votre outil visuel (VS Code, Meld, Beyond Compare) :
git config --global merge.tool vscodegit config --global mergetool.vscode.cmd 'code --wait --merge $REMOTE $LOCAL $BASE $MERGED'git mergetoolAvec --merge, VS Code ouvre la vue de fusion 3-way (résultat, courant, origine) — bien plus lisible que $MERGED seul.
rerere — Reuse Recorded ResolutionGit mémorise comment vous avez résolu un conflit et le réapplique automatiquement s’il revient :
git config --global rerere.enabled true# La prochaine fois, Git dira :# Resolved 'index.html' using previous resolution.Sur quelle branche lancer git merge ?
Cliquer pour révéler la réponseSur la branche qui reçoit (ex: git switch main puis git merge feature-xxx).
Cliquer pour voir la questionFast-forward vs 3-way ?
Cliquer pour révéler la réponseFast-forward : déplacement de pointeur (linéaire). 3-way : commit de fusion M quand les deux branches ont divergé.
Cliquer pour voir la questionQue fait --no-ff ?
Cliquer pour révéler la réponseForce un commit de merge même si fast-forward possible — garde trace de la feature.
Cliquer pour voir la questionQuand conflit ?
Cliquer pour révéler la réponseMême ligne, même fichier modifié différemment sur deux branches.
Cliquer pour voir la question3 marqueurs ?
Cliquer pour révéler la réponse<<<<<<< HEAD, =======, >>>>>>> branche (début, séparateur, fin entrante).
Cliquer pour voir la questionÉtapes résolution ?
Cliquer pour révéler la réponseÉditer → choisir/combiner → supprimer marqueurs → git add → git commit / --continue.
Cliquer pour voir la questionComment annuler un merge en cours ?
Cliquer pour révéler la réponsegit merge --abort
Cliquer pour voir la questionQue fait rerere ?
Cliquer pour révéler la réponseMémorise et réapplique automatiquement une résolution déjà faite.
Cliquer pour voir la question1. Sur quelle branche lancer git merge ?
2. Quand Git crée-t-il un commit de merge ?
3. Après résolution manuelle, que faire ?
4. Que fait git merge --squash ?
# Fusiongit switch maingit merge feature-xxxgit merge --ff-only feature-xxxgit merge --no-ff feature-xxx -m "Merge feature"git merge --squash feature-xxx && git commit -m "feat: add xxx"git merge --abortgit merge --continue
# Conflitgit status # UU = Unmergedgit diff --checkgit add <fichier>git commit -m "resolve conflict"git log --oneline --graph --all
# Outilsgit config --global merge.tool vscodegit mergetoolgit config --global rerere.enabled truemerge se lance depuis la receveuse (main).fast-forward = linéaire, 3-way = commit M, squash = 1 commit propre.git add + git commit/--continue.rerere et mergetool vous font gagner un temps fou en équipe.Vous maîtrisez le local. Connectons le dépôt à GitHub pour collaborer à distance.
Étape suivante : Collaborer sur GitHub