Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.52.0
2025-11-17
- 2.51.1 â 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.47.1 â 2.48.2 no changes
-
2.47.0
2024-10-06
- 2.43.2 â 2.46.4 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.1 â 2.42.4 no changes
-
2.42.0
2023-08-21
- 2.39.4 â 2.41.3 no changes
-
2.39.3
2023-04-17
- 2.38.1 â 2.39.2 no changes
-
2.38.0
2022-10-02
- 2.35.1 â 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.34.1 â 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.2 â 2.33.8 no changes
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.30.1 â 2.32.7 no changes
-
2.30.0
2020-12-27
- 2.29.1 â 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.27.1 â 2.28.1 no changes
-
2.27.0
2020-06-01
- 2.25.1 â 2.26.3 no changes
-
2.25.0
2020-01-13
- 2.24.1 â 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.23.1 â 2.23.4 no changes
-
2.23.0
2019-08-16
- 2.22.2 â 2.22.5 no changes
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 â 2.21.4 no changes
-
2.20.0
2018-12-09
- 2.19.1 â 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 â 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 â 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.10.5 â 2.11.4 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
- 2.3.10 no changes
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
SYNOPSIS
gitmerge[-n] [--stat] [--compact-summary] [--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>âŠâ]gitmerge(--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 sujet
/
D---E---F---G master
Alors, git merge sujet rejouera les modifications apportĂ©es Ă la branche sujet 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 (G).
A---B---C topic
/ \
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âŻ:
|
Warning
|
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-ffavec--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-editpeut ĂȘ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-mde 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
gitmerge. Pour faciliter lâajustement de ces scripts au comportement mis Ă jour, la variable dâenvironnementGIT_MERGE_AUTOEDITpeut ĂȘtre dĂ©finie surnoĂ 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.
--ffest 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Ă©rarchierefs/tags/, auquel cas--no-ffest 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[<id-clé>] -
--gpg-sign[=<id-clé>] -
--no-gpg-sign -
Signer le commit rĂ©sultant de la fusion avec GPG. Lâargument <id-clĂ©> 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-signest utile pour annuler lâeffet de la variable de configurationcommit.gpgSignainsi que tout--gpg-signprĂ©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-bydu 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-signoffpeut ĂȘtre utilisĂ©e pour contrecarrer une option--signoffprĂ©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
-nou--no-stat, ne pas afficher de diffstat Ă la fin de la fusion. -
--compact-summary -
Montrer un résumé compact à 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 prochaingitcommitĂ 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,--commitnâest pas permis, et Ă©chouera. -
--verify -
--no-verify -
Par défaut, les crochets pre-merge et commit-msg sont exécutés. Lorsque
--no-verifyest 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 (ortlors de la fusion dâune seule tĂȘte,octopussinon). -
-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
--statet--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_AUTOSTASHet 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. -
Par défaut, la commande
gitmergerefuse 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
--logest spécifié, un journal court des commits en cours de fusion sera ajouté au message spécifié.La commande
gitfmt-merge-msgpeut ĂȘtre utilisĂ©e pour donner une bonne valeur par dĂ©faut pour les invocations automatisĂ©es degitmerge. 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
--logest 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-autoupdateest un bon moyen de revĂ©rifier ce querererea fait et de dĂ©tecter des erreurs de fusion potentielles, avant de valider le rĂ©sultat dans lâindex avec ungitaddsĂ©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-ignorepour 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Ă©,
gitmerge--abortsera dans certains cas incapable de reconstruire ces changements. Il est donc recommandĂ© de toujours valider ou remiser vos modifications avant de lancergitmerge.gitmerge--abortest Ă©quivalent Ăgitreset--mergequandMERGE_HEADest prĂ©sent Ă moins queMERGE_AUTOSTASHsoit Ă©galement prĂ©sent, auquel casgitmerge--abortapplique lâentrĂ©e de la remisage Ă lâarbre de travail alors quegitreset--mergesauvegardera 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_AUTOSTASHest prĂ©sent, lâentrĂ©e de la remisage sera sauvegardĂ©e dans la liste des remisages. -
--continue -
AprĂšs lâarrĂȘt dâun
gitmergeen raison de conflits, vous pouvez conclure la fusion en lançantgitmerge--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_HEADpar lâinvocation prĂ©cĂ©dente degitfetchpour 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 :
-
Le pointeur
HEADreste le mĂȘme. -
La référence
MERGE_HEADest dĂ©finie pour pointer vers lâautre tĂȘte de branche. -
Les chemins qui ont Ă©tĂ© fusionnĂ©s proprement sont mis Ă jour Ă la fois dans le fichier dâindex et dans votre arbre de travail.
-
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 deMERGE_HEAD(vous pouvez inspecter les Ă©tapes avecgitls-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 <<<===>>>. -
Une réf nommée
AUTO_MERGEest Ă©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 fusionortest utilisĂ©e (par dĂ©faut). -
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. âŻ;gitmerge--abortpeut ĂȘtre utilisĂ© pour cela. -
RĂ©soudre les conflits. Git marquera les conflits dans lâarbre de travail. Modifier les fichiers en forme et les
gitaddĂ lâindex. Utilisergitcommitougitmerge--continuepour sceller lâaffaire. Cette derniĂšre commande vĂ©rifie sâil y a une fusion (interrompue) en cours avant dâappelergitcommit.
Vous pouvez rĂ©soudre le conflit Ă lâaide dâun certain nombre dâoutils :
-
Utiliser un mergetool.
gitmergetoolpour 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
HEADetMERGE_HEAD.gitdiffAUTO_MERGEva afficher quelles modifications vous avez rĂ©alisĂ©es jusquâici pour rĂ©soudre les conflits textuels. -
Regarder les différences de chaque branche.
gitlog--merge-p<chemin> montrera les diffĂ©rences dâabord pour la versionHEADet ensuite pour la versionMERGE_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 versionMERGE_HEAD.
EXEMPLES
-
Fusionner les branches
correctionset "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
maintdans 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.Dans le cas oĂč le chemin est un sous-module, si le commit de sous-module utilisĂ© dâun cĂŽtĂ© de la fusion est un descendant du commit de sous-module utilisĂ© de lâautre cĂŽtĂ© de la fusion, Git tente dâavancer rapidement vers le descendant. Sinon, Git traitera ce cas comme un conflit, suggĂ©rant comme rĂ©solution un commit de sous-module qui est descendant des commits conflictuels, sâil existe.
La stratégie
ortpeut 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 fusiontheirsavec 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 de tout fichier qui nĂ©cessite 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 configurationmerge.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--find-renamesde git-diff[1]. -
rename-threshold=<n> -
Synonyme obsolĂšte pour
find-renames=<n>. -
no-renames -
Désactiver la détection de renommage. Ceci annule la variable de configuration
merge.renames. Voir aussi git-diff[1]--no-renames. -
histogram -
Synonyme obsolĂšte pour
diff-algorithm=histogram. -
patience -
Synonyme obsolĂšte pour
diff-algorithm=patience. -
diff-algorithm=(histogram|minimal|myers|patience) -
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 queortutilise par défautdiff-algorithm=histogram, alors que les diffs normaux utilisent par défaut la valeur du paramÚtre de configurationdiff.algorithm. -
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 -
Câest maintenant un synonyme de
ort. Il sâagissait dâune autre mise en Ćuvre jusquâĂ v2.49.0, mais a Ă©tĂ© redirigĂ© versortdepuis v2.50.0. La stratĂ©gie rĂ©cursive prĂ©cĂ©dente Ă©tait la stratĂ©gie par dĂ©faut pour rĂ©soudre deux tĂȘtes de Git v0.99.9k jusquâĂ v2.33.0. -
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
-Xoursde la stratégie de fusionort. -
subtree -
Il sâagit dâune stratĂ©gie
ortmodifiĂ©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
Tout ce qui se trouve au-dessus de cette ligne dans cette section nâest pas inclus dans la documentation git-config[1]. Le contenu qui suit est le mĂȘme que celui qui sây trouve :
|
Warning
|
Missing 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 .