Git 🌙
Français â–Ÿ Topics â–Ÿ Latest version â–Ÿ git-merge last updated in 2.47.0

NOM

git-merge - Fusionne deux ou plusieurs historiques de développement ensemble

SYNOPSIS

git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
	[--no-verify] [-s <strategie>] [-X <option-de-strategie>] [-S[<id-clé>]]
	[--[no-]allow-unrelated-histories]
	[--[no-]rerere-autoupdate] [-m <msg>] [-F <fichier>]
	[--into-name <branche>] [<commit>…​]
git merge (--continue | --abort | --quit)

DESCRIPTION

IntĂšgre les modifications des commits nommĂ©s (depuis le moment oĂč leur historique a divergĂ© de la branche actuelle) dans la branche actuelle. Cette commande est utilisĂ©e par git pull pour incorporer les modifications d’un autre dĂ©pĂŽt et peut ĂȘtre utilisĂ©e Ă  la main pour fusionner les modifications d’une branche dans une autre.

Supposons que l’historique suivant existe et que la branche actuelle est master :

	  A---B---C theme
	 /
    D---E---F---G master

Alors, "git merge theme" rejouera les modifications apportĂ©es Ă  la branche theme puisqu’elle s’est Ă©cartĂ©e de master (c’est-Ă -dire E) jusqu’à son commit actuel (C) par-dessus master, et enregistrera le rĂ©sultat dans un nouveau commit comprenant les noms des deux parents et un message de validation de l’utilisateur dĂ©crivant les modifications. Avant l’opĂ©ration, ORIG_HEAD est dĂ©fini sur le sommet de la branche actuelle (C).

	  A---B---C theme
	 /         \
    D---E---F---G---H master

Une fusion s’arrĂȘte s’il y a un conflit qui ne peut ĂȘtre rĂ©solu automatiquement ou si --no-commit a Ă©tĂ© fourni lors de l’amorce de la fusion. À ce moment vous pouvez lancer git merge --abort ou git merge --continue.

git merge --abort annulera le processus de fusion et tentera de reconstruire l’Ă©tat antĂ©rieur Ă  la fusion. Cependant, s’il y a eu des changements non validĂ©s au dĂ©but de la fusion (et surtout si ces changements ont Ă©tĂ© modifiĂ©s aprĂšs le dĂ©but de la fusion), git merge --abort sera dans certains cas incapable de reconstruire les modifications originales (avant la fusion). Par consĂ©quent :

Attention : l’exĂ©cution de git merge avec des modifications non triviales non validĂ©es est dĂ©couragĂ©e : bien que possible, elle peut vous laisser dans un Ă©tat duquel il est difficile de revenir en arriĂšre en cas de conflit.

OPTIONS

--commit
--no-commit

Effectuer la fusion et valider le rĂ©sultat. Cette option peut ĂȘtre utilisĂ©e pour passer outre --no-commit.

Avec --no-commit, effectuer la fusion et s’arrĂȘter juste avant de crĂ©er un commit de fusion, pour donner Ă  l’utilisateur une chance d’inspecter et de peaufiner le rĂ©sultat de la fusion avant de valider.

Notez que les mises Ă  jour en avance rapide ne crĂ©ent pas de commit de fusion et qu’il n’y a donc aucun moyen d’arrĂȘter ces fusions avec --no-commit. Ainsi, si vous voulez vous assurer que votre branche n’est pas modifiĂ©e ou mise Ă  jour par la commande de fusion, utilisez --no-ff avec --no-commit.

--edit
-e
--no-edit

Avant de procĂ©der Ă  une fusion automatisĂ©e rĂ©ussie, lancer un Ă©diteur pour modifier le message de fusion gĂ©nĂ©rĂ© automatiquement, afin que l’utilisateur puisse expliquer et justifier la fusion. L’option --no-edit peut ĂȘtre utilisĂ©e pour accepter le message gĂ©nĂ©rĂ© automatiquement (ce qui est gĂ©nĂ©ralement dĂ©conseillĂ©). L’option --edit (ou -e) est toujours utile si vous donnez un brouillon de message avec l’option -m de la ligne de commande et que vous voulez l’Ă©diter dans l’Ă©diteur.

Les scripts plus anciens peuvent dĂ©pendre du comportement historique de ne pas autoriser l’utilisateur Ă  modifier le message du journal de fusion. Ils verront un Ă©diteur ouvert lorsqu’ils exĂ©cuteront git merge. Pour faciliter l’ajustement de ces scripts au comportement mis Ă  jour, la variable d’environnement GIT_MERGE_AUTOEDIT peut ĂȘtre dĂ©finie sur no Ă  leur dĂ©but.

--cleanup=<mode>

Cette option dĂ©termine comment le message de fusion sera nettoyĂ© avant d’ĂȘtre envoyĂ©. Voir git-commit[1] pour plus de dĂ©tails. De plus, si le <mode> a la valeur scissors, les ciseaux seront ajoutĂ©s Ă  MERGE_MSG avant d’ĂȘtre transmis Ă  la machinerie de commit dans le cas d’un conflit de fusion.

--ff
--no-ff
--ff-only

PrĂ©cise comment une fusion est traitĂ©e lorsque l’historique fusionnĂ© est dĂ©jĂ  un descendant de l’historique actuel. --ff est la valeur par dĂ©faut, sauf si l’on fusionne une Ă©tiquette annotĂ©e (et Ă©ventuellement signĂ©e) qui n’est pas stockĂ©e Ă  sa place naturelle dans la hiĂ©rarchie refs/tags/, auquel cas --no-ff est supposĂ©.

Avec --ff, lorsque c’est possible, rĂ©soudre la fusion comme une avance rapide (ne mettre Ă  jour le pointeur de branche que pour qu’il corresponde Ă  la branche fusionnĂ©e ; ne pas crĂ©er de commit de fusion). Lorsque ce n’est pas possible (lorsque l’historique fusionnĂ© n’est pas un descendant de l’historique actuel), crĂ©er un commit de fusion.

Avec --no-ff, crĂ©er un commit de fusion dans tous les cas, mĂȘme si la fusion peut ĂȘtre rĂ©solue en avance rapide.

Dans le cas --ff-only, il faut rĂ©soudre la fusion en avance rapide lorsque c’est possible. Lorsque ce n’est pas possible, refuser de fusionner et sortir avec un statut non nul.

-S[<idclé>]
--gpg-sign[=<idclé>]
--no-gpg-sign

Signer le commit rĂ©sultant de la fusion avec GPG. L’argument idclĂ© est optionnel avec par dĂ©faut l’identitĂ© du validateur ; si spĂ©cifiĂ©e, elle doit ĂȘtre collĂ©e Ă  l’option sans aucun espace. --no-gpg-sign est utile pour annuler l’effet de la variable de configuration commit.gpgSign ainsi que tout --gpg-sign prĂ©cĂ©dent.

--log[=<n>]
--no-log

En plus des noms de branches, remplir le message du journal avec les descriptions d’une ligne depuis au maximum <n> commits rĂ©els qui sont en train d’ĂȘtre fusionnĂ©s. Voir aussi git-fmt-merge-msg[1].

Avec --no-log, ne pas indiquer les descriptions d’une ligne des commits rĂ©els qui sont fusionnĂ©s.

--signoff
--no-signoff

Ajouter une ligne finale Signed-off-by du validateur Ă  la fin du message de validation. La signification de signoff dĂ©pend du projet sur lequel vous validez. Par exemple, cela peut certifier que le validateur a le droit de soumettre son travail sous la licence du projet ou accepte une certaine reprĂ©sentation du contributeur, tel qu’un Certificat d’Origine de DĂ©veloppeur. (Voir https://developercertificate.org/ pour celui utilisĂ© par les projet du noyau Linux ou de Git). Consultez la documentation ou la direction du projet auquel vous contribuez pour comprendre comment les signatures sont utilisĂ©es dans ce projet.

L’option --no-signoff peut ĂȘtre utilisĂ©e pour contrecarrer une option --signoff prĂ©cĂ©dente sur la ligne de commande.

--stat
-n
--no-stat

Afficher un diffstat Ă  la fin de la fusion. Le diffstat est Ă©galement contrĂŽlĂ© par l’option de configuration merge.stat.

Avec -n ou --no-stat, ne pas afficher de diffstat Ă  la fin de la fusion.

--squash
--no-squash

Produire l’arbre de travail et l’Ă©tat d’index comme si une fusion rĂ©elle s’Ă©tait produite (sauf pour les informations de fusion), mais ne pas faire de commit, dĂ©placer la HEAD, ou enregistrer $GIT_DIR/MERGE_HEAD (pour forcer le prochain git commit Ă  crĂ©er un commit de fusion). Cela vous permet de crĂ©er un seul commit au-dessus de la branche actuelle dont l’effet est identique Ă  la fusion d’une autre branche (ou plus dans le cas d’une fusion pieuvre).

Avec --no-squash, effectuer la fusion et valider le rĂ©sultat. Cette option peut ĂȘtre utilisĂ©e pour passer outre --squash.

Avec --squash, --commit n’est pas permis, et Ă©chouera.

--[no-]verify

Par défaut, les crochets pre-merge et commit-msg sont exécutés. Lorsque --no-verify est donné, ils sont contournés. Voir aussi githooks[5].

-s <stratégie>
--strategy=<strategie>

Utiliser la stratĂ©gie de fusion donnĂ©e ; peut ĂȘtre fourni plus d’une fois pour spĂ©cifier l’ordre dans lequel elles doivent ĂȘtre essayĂ©es. S’il n’y a pas d’option -s, une liste intĂ©grĂ©e de stratĂ©gies est utilisĂ©e Ă  la place (ort lors de la fusion d’une seule tĂȘte, octopus sinon).

-X <option>
--strategy-option=<option>

Faire passer l’option spĂ©cifique de la stratĂ©gie de fusion Ă  la stratĂ©gie de fusion.

--verify-signatures
--no-verify-signatures

VĂ©rifier que le commit sommet de la branche latĂ©rale Ă  fusionner est signĂ© avec une clĂ© valide, c’est-Ă -dire une clĂ© qui a un uid valide : dans le modĂšle de confiance par dĂ©faut, cela signifie que la clĂ© de signature a Ă©tĂ© signĂ©e par une clĂ© de confiance. Si le commit sommet de la branche latĂ©rale n’est pas signĂ© avec une clĂ© valide, la fusion est annulĂ©e.

--summary
--no-summary

Synonymes de --stat et --no-stat ; ils sont dĂ©conseillĂ©s et seront supprimĂ©s Ă  l’avenir.

-q
--quiet

Mode Silencieux. Implique --no-progress.

-v
--verbose

Mode bavard.

--progress
--no-progress

Activer/dĂ©sactiver explicitement l’affichage du progrĂšs. Si aucun des deux n’est spĂ©cifiĂ©, la progression est indiquĂ©e si l’erreur standard est connectĂ©e Ă  un terminal. Notez que toutes les stratĂ©gies de fusion peuvent ne pas prendre en charge le rapport d’avancement.

--autostash
--no-autostash

CrĂ©er automatiquement une entrĂ©e temporaire de remisage avant le dĂ©but de l’opĂ©ration, l’enregistrer dans la rĂ©f MERGE_AUTOSTASH et l’appliquer aprĂšs la fin de l’opĂ©ration. Cela signifie que vous pouvez exĂ©cuter l’opĂ©ration sur un arbre de travail sale. Cependant, utilisez-le avec prĂ©caution : l’application finale du remisage aprĂšs une fusion rĂ©ussie peut entraĂźner des conflits non nĂ©gligeables.

--allow-unrelated-histories

Par dĂ©faut, la commande git merge refuse de fusionner les historiques qui ne partagent pas un ancĂȘtre commun. Cette option peut ĂȘtre utilisĂ©e pour passer outre cette sĂ©curitĂ© lors de la fusion des historiques de deux projets qui ont commencĂ© leur vie indĂ©pendamment l’un de l’autre. Comme c’est une occasion trĂšs rare, il n’existe pas de variable de configuration pour activer cette option par dĂ©faut et elle ne sera pas ajoutĂ©e.

-m <msg>

DĂ©finir le message de commit Ă  utiliser pour le commit de fusion (dans le cas oĂč un commit est crĂ©Ă©).

Si --log est spécifié, un journal court des commits en cours de fusion sera ajouté au message spécifié.

La commande git fmt-merge-msg peut ĂȘtre utilisĂ©e pour donner une bonne valeur par dĂ©faut pour les invocations automatisĂ©es de git merge. Le message automatisĂ© peut inclure la description de la branche.

--into-name <branche>

Préparer le message de fusion par défaut comme si la fusion se faisait vers la branche <branche>, au lieu du nom de la branche réelle vers laquelle la fusion est faite.

-F <fichier>
--file=<fichier>

Lire le message de commit Ă  utiliser pour le commit de fusion (dans le cas oĂč un commit est crĂ©Ă©).

Si --log est spécifié, un journal court des commits en cours de fusion sera ajouté au message spécifié.

--rerere-autoupdate
--no-rerere-autoupdate

AprĂšs que le mĂ©canisme rerere rĂ©utilise une rĂ©solution enregistrĂ©e sur le conflit actuel pour mettre Ă  jour les fichiers dans l’arbre de travail, lui permettre de mettre Ă©galement Ă  jour l’index avec le rĂ©sultat de la rĂ©solution. --no-rerere-autoupdate est un bon moyen de revĂ©rifier ce que rerere a fait et de dĂ©tecter des erreurs de fusion potentielles, avant de valider le rĂ©sultat dans l’index avec un git add sĂ©parĂ©.

--overwrite-ignore
--no-overwrite-ignore

Écraser silencieusement les fichiers ignorĂ©s du rĂ©sultat de la fusion. C’est le comportement par dĂ©faut. Utilisez --no-overwrite-ignore pour abandonner.

--abort

Abandonner le processus actuel de rĂ©solution des conflits, et essayer de reconstruire l’Ă©tat antĂ©rieur Ă  la fusion. Si une entrĂ©e de remisage automatique est prĂ©sente, l’appliquer Ă  l’arbre de travail.

S’il y avait des modifications non validĂ©es dans l’arbre de travail lorsque la fusion a commencĂ©, git merge --abort sera dans certains cas incapable de reconstruire ces changements. Il est donc recommandĂ© de toujours valider ou remiser vos modifications avant de lancer git merge.

git merge --abort est Ă©quivalent Ă  git reset --merge quand MERGE_HEAD est prĂ©sent Ă  moins que MERGE_AUTOSTASH soit Ă©galement prĂ©sent, auquel cas git merge --abort applique l’entrĂ©e de la remisage Ă  l’arbre de travail alors que git reset --merge sauvegardera les changements remisĂ©s dans la liste de remisage.

--quit

Oublier la fusion en cours. Laisser l’index et l’arbre de travail en l’áșżtat. Si MERGE_AUTOSTASH est prĂ©sent, l’entrĂ©e de la remisage sera sauvegardĂ©e dans la liste des remisages.

--continue

AprĂšs l’arrĂȘt d’un git merge en raison de conflits, vous pouvez conclure la fusion en lançant git merge --continue (voir la section "COMMENT RÉSOUDRE LES CONFLITS" ci-dessous).

<commit>…​

Les commits, gĂ©nĂ©ralement les sommets des autres branches, Ă  fusionner avec notre branche. En spĂ©cifiant plus d’un commit, on crĂ©e une fusion avec plus de deux parents (affectueusement appelĂ©e fusion Octopus).

Si aucun commit n’est donnĂ© sur la ligne de commande, fusionner les branches de suivi Ă  distance que la branche actuelle est configurĂ©e pour utiliser comme sa branche amont. Voir aussi la section configuration de cette page de manuel.

Lorsque FETCH_HEAD (et aucun autre commit) est spĂ©cifiĂ©, les branches enregistrĂ©es dans le fichier .git/FETCH_HEAD par l’invocation prĂ©cĂ©dente de git fetch pour la fusion sont fusionnĂ©es Ă  la branche courante.

VÉRIFICATIONS AVANT LA FUSION

Avant d’appliquer des modifications extĂ©rieures, vous devez faire en sorte que votre propre travail soit en bon Ă©tat et validĂ© localement, afin qu’il ne soit pas Ă©crasĂ© en cas de conflits. Voir aussi git-stash[1]. git pull et git merge s’arrĂȘteront sans rien faire lorsque des modifications locales non validĂ©es chevaucheront des fichiers que git pull/git merge devront mettre Ă  jour.

Pour Ă©viter d’enregistrer des modifications sans rapport dans le commit de fusion, git pull et git merge seront Ă©galement annulĂ©s s’il y a des modifications enregistrĂ©es dans l’index par rapport au commit HEAD. (Des exceptions rares Ă  cette rĂšgle peuvent exister selon la stratĂ©gie de fusion utilisĂ©e, mais en gĂ©nĂ©ral, l’index doit correspondre Ă  HEAD.)

Si tous les commit nommĂ©s sont dĂ©jĂ  des ancĂȘtres de HEAD, git merge sortira plus tĂŽt avec le message « DĂ©jĂ  Ă  jour ».

FUSION EN AVANCE RAPIDE

Souvent, le sommet de la branche actuelle est un ancĂȘtre du commit nommĂ©. C’est le cas le plus courant, surtout lorsqu’il est invoquĂ© depuis git pull : vous suivez un dĂ©pĂŽt amont, vous n’avez pas validĂ© de modifications locales, et vous voulez maintenant mettre Ă  jour vers une rĂ©vision amont plus rĂ©cente. Dans ce cas, un nouveau commit n’est pas nĂ©cessaire pour stocker l’historique combiné ; Ă  la place, la HEAD (avec l’index) est mise Ă  jour pour pointer vers le commit nommĂ©, sans crĂ©er un commit de fusion supplĂ©mentaire.

Ce comportement peut ĂȘtre supprimĂ© avec l’option --no-ff.

VÉRITABLE FUSION

Sauf dans le cas d’une fusion en avance rapide (voir ci-dessus), les branches Ă  fusionner doivent ĂȘtre liĂ©es par un commit de fusion qui a pour parents les deux branches.

Une version fusionnĂ©e rĂ©conciliant les changements de toutes les branches Ă  fusionner est validĂ©es, et votre HEAD, votre index et votre arbre de travail sont mis Ă  jour en consĂ©quence. Il est possible d’avoir des modifications dans l’arbre de travail tant qu’elles ne se chevauchent pas ; la mise Ă  jour les prĂ©servera.

Lorsqu’il n’est pas Ă©vident de rĂ©concilier les modifications, voici ce qui se passe :

  1. Le pointeur HEAD reste le mĂȘme.

  2. La rĂ©fĂ©rence MERGE_HEAD est dĂ©finie pour pointer vers l’autre tĂȘte de branche.

  3. Les chemins qui ont Ă©tĂ© fusionnĂ©s proprement sont mis Ă  jour Ă  la fois dans le fichier d’index et dans votre arbre de travail.

  4. En cas de conflit de chemins, le fichier d’index enregistre jusqu’Ă  trois versions : l’Ă©tape 1 stocke la version de l’ancĂȘtre commun, l’Ă©tape 2 de HEAD, et l’Ă©tape 3 de MERGE_HEAD (vous pouvez inspecter les Ă©tapes avec git ls-files -u). Les fichiers de l’arbre de travail contiennent le rĂ©sultat de l’opĂ©ration de fusion, c’est-Ă -dire les rĂ©sultats de la fusion Ă  3 points avec les marqueurs de conflit familiers <<< === >>>.

  5. Une rĂ©f nommĂ©e AUTO_MERGE est Ă©crite, indiquant un arbre correspondant au contenu actuel de l’arbre de travail (y compris les marqueurs de conflit pour les conflits textuels). Notez que cette rĂ©f n’est Ă©crite que lorsque la stratĂ©gie de fusion ort est utilisĂ©e (par dĂ©faut).

  6. Aucune autre modification n’est apportĂ©e. En particulier, les modifications locales que vous aviez avant de commencer la fusion resteront les mĂȘmes et les entrĂ©es de l’index qui les concernent resteront telles quelles, c’est-Ă -dire correspondant Ă  HEAD.

Si vous avez essayé une fusion qui a donné lieu à des conflits complexes et que vous voulez recommencer, vous pouvez vous remettre à zéro avec git merge --abort.

LA FUSION D’ÉTIQUETTE

Lors de la fusion d’une Ă©tiquette annotĂ©e (et Ă©ventuellement signĂ©e), Git crĂ©e toujours un commit de fusion mĂȘme si une fusion en avance rapide est possible, et le modĂšle de message de validation est prĂ©parĂ© avec le message de l’Ă©tiquette. De plus, si l’Ă©tiquette est signĂ©e, la vĂ©rification de la signature est signalĂ©e sous forme de commentaire dans le modĂšle de message. Voir aussi git-tag[1].

Lorsque vous souhaitez simplement intĂ©grer le travail menant au commit qui se trouve ĂȘtre Ă©tiquetĂ©, par exemple lors de la synchronisation avec un point de publication en amont, vous ne voudrez peut-ĂȘtre pas faire un commit de fusion inutile.

Dans ce cas, vous pouvez "dĂ©baller" l’Ă©tiquette vous-mĂȘme avant de la donner Ă  git merge, ou passer --ff-only lorsque vous n’avez pas de travail Ă  faire vous-mĂȘme par exemple

git fetch origin
git merge v1.2.3^0
git merge --ff-only v1.2.3

COMMENT LES CONFLITS SONT PRÉSENTÉS

Lors d’une fusion, les fichiers de l’arbre de travail sont mis Ă  jour pour reflĂ©ter le rĂ©sultat de la fusion. Parmi les modifications apportĂ©es Ă  la version de l’ancĂȘtre commun, celles qui ne se chevauchent pas (c’est-Ă -dire que vous avez modifiĂ© une zone du fichier alors que l’autre cĂŽtĂ© a laissĂ© cette zone intacte, ou vice versa) sont incorporĂ©es directement dans le rĂ©sultat final. Cependant, lorsque les deux cĂŽtĂ©s ont apportĂ© des modifications Ă  la mĂȘme zone, Git ne peut pas choisir au hasard un cĂŽtĂ© par rapport Ă  l’autre, et vous demande de rĂ©soudre le problĂšme en laissant ce que les deux cĂŽtĂ©s ont fait Ă  cette zone.

Par dĂ©faut, Git utilise le mĂȘme style que celui utilisĂ© par le programme "merge" de la suite RCS pour prĂ©senter une telle section conflictuelle, comme ceci :

Voici des lignes qui sont soit inchangĂ©es par rapport Ă  l'ancĂȘtre
commun, ou résolues proprement parce qu'un seul cÎté a changé,
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme maniĂšre.
<<<<<<< yours : exemple.txt
La rĂ©solution des conflits est difficile ;
allons faire du shopping.
=======
Git facilite la résolution des conflits.
>>>>>>> theirs : exemple.txt
Et voici une autre ligne qui est résolue proprement ou non modifiée.

La zone oĂč une paire de modifications contradictoires s’est produite est marquĂ©e par les marqueurs <<<<<<<, ========, et >>>>>>>>>>`. La partie qui prĂ©cĂšde le ======= est gĂ©nĂ©ralement votre cĂŽtĂ©, et la partie qui suit est gĂ©nĂ©ralement leur cĂŽtĂ©.

Le format par dĂ©faut ne montre pas ce que l’original a dit dans la zone de conflit. Vous ne pouvez pas savoir combien de lignes sont supprimĂ©es et remplacĂ©es par la remarque de Barbie Ă  votre cĂŽtĂ©. La seule chose que vous pouvez dire, c’est que votre cĂŽtĂ© veut dire que c’est difficile et que vous prĂ©fĂ©rez faire du shopping, alors que l’autre cĂŽtĂ© veut prĂ©tendre que c’est facile.

Un autre style peut ĂȘtre utilisĂ© en rĂ©glant la variable de configuration merge.conflictStyle sur "diff3" ou "zdiff3". Dans le style "diff3", le conflit ci-dessus peut ressembler Ă  ceci :

Voici les lignes qui sont soit inchangĂ©es par rapport Ă  l'ancĂȘtre
commun, ou proprement résolues parce qu'un seul cÎté a changé,
<<<<<<<< yours:exemple.txt
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme façon.
La résolution des conflits est difficile ;
Allons faire du shopping.
||||||| base:sample.txt
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme façon.
La résolution des conflits est difficile.
=======
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme façon.
Git facilite la résolution des conflits.
>>>>>>> theirs:exemple.txt
Et voici une autre ligne qui est proprement résolue ou non modifiée.

alors que dans le style "zdiff3", cela peut ressembler Ă  ceci :

Voici les lignes qui sont soit inchangĂ©es par rapport Ă  l'ancĂȘtre
commun, ou proprement résolu parce qu'un seul cÎté a changé,
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme maniĂšre.
<<<<<<<< yours:exemple.txt
La résolution des conflits est difficile ;
Allons faire du shopping.
||||||| base:sample.txt
ou parce que les deux cĂŽtĂ©s ont changĂ© de la mĂȘme maniĂšre.
La résolution des conflits est difficile.
=======
Git facilite la résolution des conflits.
>>>>>>> theirs:exemple.txt
Et voici une autre ligne qui est proprement résolue ou non modifiée.

En plus des marqueurs <<<<<<<<, =======, et >>>>>>>>>>>, il utilise un autre marqueur `|||||||| qui est suivi par le texte original. Vous pouvez voir que l’original ne faisait qu’Ă©noncer un fait, et que votre camp a simplement cĂ©dĂ© Ă  cette dĂ©claration et a abandonnĂ©, tandis que l’autre camp a essayĂ© d’avoir une attitude plus positive. Vous pouvez parfois aboutir Ă  une meilleure rĂ©solution en regardant l’original.

COMMENT RÉSOUDRE LES CONFLITS

Aprùs avoir vu un conflit, vous pouvez faire deux choses :

  • DĂ©cider de ne pas fusionner. Les seuls nettoyages dont vous avez besoin sont de rĂ©initialiser le fichier index au commit HEAD Ă  inverser 2. et pour nettoyer les modification d’arbre de travail effectuĂ©es par 2. et 3.  ; git merge --abort peut ĂȘtre utilisĂ© pour cela.

  • RĂ©soudre les conflits. Git marquera les conflits dans l’arbre de travail. Modifier les fichiers en forme et les git add Ă  l’index. Utiliser git commit ou git merge --continue pour sceller l’affaire. Cette derniĂšre commande vĂ©rifie s’il y a une fusion (interrompue) en cours avant d’appeler git commit.

Vous pouvez rĂ©soudre le conflit Ă  l’aide d’un certain nombre d’outils :

  • Utiliser un mergetool. git mergetool pour lancer un outil de fusion graphique qui vous permettra de travailler sur la fusion.

  • Regarder les diffĂ©rences. ` git diff` affichera une diffĂ©rence Ă  trois points, en mettant en Ă©vidence les modifications apportĂ©es par les versions HEAD et MERGE_HEAD. git diff AUTO_MERGE va afficher quelles modifications vous avez rĂ©alisĂ©es jusqu’ici pour rĂ©soudre les conflits textuels.

  • Regarder les diffĂ©rences de chaque branche. git log --merge -p <chemin> montrera les diffĂ©rences d’abord pour la version HEAD et ensuite pour la version MERGE_HEAD.

  • Regarder les originaux. git show :1:nom-de-fichier montre l’ancĂȘtre commun, git show :2:nom-de-fichier montre la version HEAD, et git show :3:nom-de-fichier montre la version MERGE_HEAD.

EXEMPLES

  • Fusionner les branches corrections et "amĂ©liorations` par dessus la branche actuelle, en faisant une fusion octopus :

    $ git merge corrections améliorations
  • Fusionner la branche obsolĂšte dans la branche actuelle, en utilisant la stratĂ©gie de fusion ours :

    $ git merge -s ours obsolĂšte
  • Fusionner la branche maint dans la branche actuelle, mais ne pas faire un nouveau commit automatiquement :

    $ git merge --no-commit maint

    Ceci peut ĂȘtre utilisĂ© lorsque vous souhaitez inclure d’autres modifications Ă  la fusion ou lorsque vous souhaitez rĂ©diger votre propre message de validation de la fusion.

    Vous devriez vous abstenir d’abuser de cette possibilitĂ© pour introduire en douce des modifications substantielles dans un commit de fusion. De petites corrections comme le remplacement du nom de la version ou de la livraison seraient acceptables.

LES STRATÉGIES DE FUSION

Le mĂ©canisme de fusion (commandes git merge et git pull) permet de choisir les stratĂ©gies de fusion du backend avec l’option -s. Certaines stratĂ©gies peuvent Ă©galement prendre leurs propres options, qui peuvent ĂȘtre passĂ©es en donnant des arguments -X<option> Ă  git merge et/ou git pull.

ort

C’est la stratĂ©gie de fusion par dĂ©faut lors du tirage ou de la fusion d’une branche. Cette stratĂ©gie ne peut rĂ©soudre que deux tĂȘtes en utilisant un algorithme de fusion Ă  trois voies. Lorsqu’il y a plus d’un ancĂȘtre commun qui peut ĂȘtre utilisĂ© pour la fusion Ă  trois, il crĂ©e un arbre fusionnĂ© des ancĂȘtres communs et l’utilise comme arbre de rĂ©fĂ©rence pour la fusion Ă  trois. Il a Ă©tĂ© rapportĂ© que cela permettait de rĂ©duire les conflits de fusion sans provoquer de fausses fusions, grĂące Ă  des tests effectuĂ©s sur de vraies fusions tirĂ©es de l’historique de dĂ©veloppement du noyau Linux 2.6. En outre, cette stratĂ©gie permet de dĂ©tecter et de gĂ©rer les fusions impliquant des renommages. Elle ne peut actuellement pas utiliser les copies dĂ©tectĂ©es. Le nom de cet algorithme est un acronyme ("Ostensibly Recursive’s Twin" : Jumeau ostensible de recurse) et vient du fait qu’il a Ă©tĂ© Ă©crit pour remplacer l’algorithme par dĂ©faut prĂ©cĂ©dent, recursive.

La stratégie ort peut prendre les options suivantes :

ours

Cette option oblige Ă  rĂ©soudre les sections en conflit de maniĂšre autonome et propre en favorisant notre version (our). Les modifications par rapport Ă  l’autre arbre qui n’entrent pas en conflit avec notre version se reflĂštent dans le rĂ©sultat de la fusion. Pour un fichier binaire, tout le contenu est pris de notre cĂŽtĂ©.

Il ne faut pas la confondre avec la stratĂ©gie de fusion ours, qui ne tient mĂȘme pas compte de ce que contient l’autre arbre. Elle rejette tout ce que l’autre arbre a fait, dĂ©clarant que "notre" historique (our) contient tout ce qui s’y est passĂ©.

theirs

C’est le contraire de ours ; notez que, contrairement Ă  ours, il n’y a pas de stratĂ©gie de fusion theirs avec laquelle confondre cette option de fusion.

ignore-space-change
ignore-all-space
ignore-space-at-eol
ignore-cr-at-eol

Traiter les lignes avec le type de changement d’espace indiquĂ© comme inchangĂ©es dans l’intĂ©rĂȘt d’une fusion Ă  trois points. Les changements d’espacement mĂ©langĂ©s Ă  d’autres changements de ligne ne sont pas ignorĂ©s. Voir aussi git-diff[1] -b, -w, --ignore-space-at-eol, et --ignore-cr-at-eol.

  • Si "leur" version (theirs) n’introduit que des changements d’espacement sur une ligne, "notre" version (our) est utilisĂ©e ;

  • Si "notre" version introduit des modifications dans l’espace blanc mais que "leur" version inclut un changement substantiel, "leur" version est utilisĂ©e ;

  • Dans le cas contraire, la fusion se dĂ©roule de la maniĂšre habituelle.

renormalize

Il s’agit d’une extraction et d’un validation virtuelle des trois Ă©tapes d’un fichier lors de la rĂ©solution d’une fusion Ă  trois points. Cette option est destinĂ©e Ă  ĂȘtre utilisĂ©e lors de la fusion de branches avec diffĂ©rents filtres clean ou rĂšgles de normalisation de fin de ligne. Voir "Fusion de branches avec diffĂ©rents attributs de validation/extraction" dans gitattributes[5] pour plus de dĂ©tails.

no-renormalize

DĂ©sactiver l’option renormalize. Cela surcharge la variable de configuration merge.renormalize .

find-renames[=<n>]

Activer la dĂ©tection de renommage, en fixant Ă©ventuellement le seuil de similaritĂ©. C’est la valeur par dĂ©faut. Cela surcharge la variable de configuration merge.renames. Voir aussi git-diff[1] --find-renames.

rename-threshold=<n>

Synonyme obsolĂšte pour find-renames=<n>.

subtree[=<chemin>]

Cette option est une forme plus avancĂ©e de stratĂ©gie subtree, oĂč la stratĂ©gie fait une estimation de la façon dont deux arbres doivent ĂȘtre dĂ©placĂ©s pour correspondre l’un Ă  l’autre lors de la fusion. Au lieu de cela, le chemin spĂ©cifiĂ© est prĂ©fixĂ© (ou tronquĂ© au debut) pour faire correspondre la forme de deux arbres.

recursive

Cela ne peut rĂ©soudre que deux tĂȘtes en utilisant un algorithme de fusion Ă  trois voies. Lorsqu’il y a plus d’un ancĂȘtre commun qui peut ĂȘtre utilisĂ© pour la fusion Ă  trois, il crĂ©e un arbre fusionnĂ© des ancĂȘtres communs et l’utilise comme arbre de rĂ©fĂ©rence pour la fusion Ă  trois. Il a Ă©tĂ© rapportĂ© que cela permettait de rĂ©duire les conflits de fusion sans provoquer de fausses fusions, grĂące Ă  des tests effectuĂ©s sur de vraies fusions tirĂ©es de l’historique de dĂ©veloppement du noyau Linux 2.6. En outre, cela permet de dĂ©tecter et de gĂ©rer les fusions impliquant des renommages. Cela n’utilise les copies dĂ©tectĂ©es. C’Ă©tait la stratĂ©gie par dĂ©faut lors de la rĂ©solution de deux sommets pour Git depuis la version v0.99.9k jusqu’Ă  v2.33.0.

La stratĂ©gie recursive utilise les mĂȘmes options que ort. Cependant, il y a trois options supplĂ©mentaires que ort ignore (non documentĂ©es ci-dessus) et qui sont potentiellement utiles avec la stratĂ©gie recursive :

patience

Synonyme obsolĂšte pour diff-algorithm=patience.

diff-algorithm=[patience|minimal|histogram|myers]

Utiliser un algorithme de diff différent lors des fusions, ce qui peut aider à éviter les erreurs de fusion dues à des lignes de correspondance sans importance (comme des accolades de fonctions distinctes). Voir aussi git-diff[1] --diff-algorithm. Notez que ort utilise spécifiquement diff-algorithm=histogram, alors que recursive utilise par défaut le paramÚtre de configuration diff.algorithm.

no-renames

Désactiver la détection de renommage. Ceci annule la variable de configuration merge.renames. Voir aussi git-diff[1] --no-renames.

resolve

Cela ne peut rĂ©soudre que deux tĂȘtes (c’est-Ă -dire la branche actuelle et une autre branche dont vous avez tirĂ©) en utilisant un algorithme de fusion Ă  trois points. Cela essaie de dĂ©tecter avec soin les ambiguĂŻtĂ©s de la fusion croisĂ©e. Les renommages ne sont pas gĂ©rĂ©s.

octopus

Cela permet de rĂ©soudre les cas Ă  plus de deux tĂȘtes, mais refuse de faire une fusion complexe qui nĂ©cessite une rĂ©solution manuelle. C’est principalement destinĂ© Ă  ĂȘtre utilisĂ© pour regrouper les tĂȘtes de branches thĂ©matiques. C’est la stratĂ©gie de fusion par dĂ©faut lorsque l’on tire ou fusionne plusieurs branches.

ours

Cela rĂ©sout un nombre quelconque de tĂȘtes, mais l’arbre rĂ©sultant de la fusion est toujours celui de la tĂȘte de la branche actuelle, ignorant effectivement toutes les modifications provenant de toutes les autres branches. C’est censĂ© ĂȘtre utilisĂ© pour remplacer l’ancienne historique du dĂ©veloppement des branches latĂ©rales. Notez que cette stratĂ©gie est diffĂ©rente de l’option -Xours de la stratĂ©gie de fusion recursive.

subtree

Il s’agit d’une stratĂ©gie ort modifiĂ©e. Lors de la fusion des arbres A et B, si B correspond Ă  un sous-arbre de A, B est d’abord ajustĂ© pour correspondre Ă  la structure arborescente de A, au lieu de lire les arbres au mĂȘme niveau. Cet ajustement est Ă©galement effectuĂ© sur l’arbre de l’ancĂȘtre commun.

Avec les stratĂ©gies qui utilisent la fusion Ă  trois points (y compris la fusion par dĂ©faut, ort), si une modification est effectuĂ©e sur les deux branches, mais qu’elle est ensuite inversĂ©e sur l’une des branches, ce changement sera prĂ©sent dans le rĂ©sultat de la fusion ; certaines personnes trouvent ce comportement dĂ©routant. Cela se produit parce que seules les tĂȘtes et la base de la fusion sont prises en compte lors d’une fusion, et non le commit individuel. L’algorithme de fusion considĂšre donc le changement inversĂ© comme n’Ă©tant pas un changement du tout, et substitue la version modifiĂ©e Ă  la place.

CONFIGURATION

branch.<nom>.mergeOptions

DĂ©finir les options par dĂ©faut pour la fusion dans la branche <nom>. La syntaxe et les options prises en charge sont les mĂȘmes que celles de git merge, mais les valeurs d’options contenant des espaces ne sont actuellement pas prises en charge.

Warning

Missing fr/includes/cmd-config-section-rest.txt

See original version for this content.

Warning

Missing fr/config/merge.txt

See original version for this content.

GIT

Fait partie de la suite git[1]

TRADUCTION

Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .

scroll-to-top