[{"data":1,"prerenderedAt":601},["ShallowReactive",2],{"page-\u002Fgit\u002Fbranches":3,"pieces-git":558,"autour-\u002Fgit\u002Fbranches":583,"prerequis-\u002Fgit\u002Fbranches":588,"plan-git":590},{"id":4,"title":5,"body":6,"description":528,"extension":529,"ligne":77,"meta":530,"motsCles":531,"navigation":537,"niveau":538,"path":539,"prerequis":540,"ressources":542,"seo":551,"sources":552,"stem":556,"__hash__":557},"docs\u002Fgit\u002F03.branches.md","Les branches",{"type":7,"value":8,"toc":512},"minimark",[9,14,36,40,44,53,56,60,89,92,96,118,122,136,145,155,166,170,182,185,202,205,209,212,235,238,243,252,256,260,272,275,279,282,286,291,365,388,392,404,426,429,435,438,452,470,474,508],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,26,29],"ul",{},[18,19,20,21,25],"li",{},"Pourquoi travailler sur une branche plutôt que directement sur ",[22,23,24],"code",{},"main",".",[18,27,28],{},"Créer une branche, passer de l'une à l'autre et les lister.",[18,30,31,32,35],{},"Fusionner avec ",[22,33,34],{},"git merge",", et résoudre un conflit sans paniquer.",[10,37,39],{"id":38},"pourquoi-brancher","Pourquoi brancher",[41,42,43],"p",{},"Ton portfolio est en ligne et fonctionne. Tu veux ajouter un champ de recherche, ce qui va prendre plusieurs jours. Pendant ce temps, quelqu'un te signale une faute sur la page d'accueil.",[41,45,46,47,49,50,52],{},"Si tu travailles directement sur ",[22,48,24],{},", ta recherche à moitié finie se mélange à la correction. Une branche règle ça : c'est une ligne de travail à part. Tu développes la recherche sur sa branche, tu corriges la faute sur ",[22,51,24],{},", et tu réunis les deux quand la recherche est prête.",[41,54,55],{},"Une branche n'est qu'une étiquette posée sur un commit. La créer ne copie aucun fichier : c'est instantané, même sur un gros projet.",[10,57,59],{"id":58},"créer-une-branche-et-y-aller","Créer une branche et y aller",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-bash shiki shiki-themes github-light-default github-dark-default github-dark-default","git switch -c recherche\n","bash","",[22,68,69],{"__ignoreMap":66},[70,71,74,78,82,86],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sIXEE","git",[70,79,81],{"class":80},"shWOn"," switch",[70,83,85],{"class":84},"s5iOY"," -c",[70,87,88],{"class":80}," recherche\n",[41,90,91],{},"Décortiquons cette commande :",[93,94],"anatomie-commande",{"exemple":95},"git-switch",[41,97,98,99,102,103,107,108,111,112,114,115,117],{},"L'option ",[22,100,101],{},"-c"," (pour ",[104,105,106],"em",{},"create",") crée la branche ",[22,109,110],{},"recherche"," sur le commit actuel, puis t'y place. Les commits que tu feras ensuite partiront sur ",[22,113,110],{},", et ",[22,116,24],{}," ne bougera pas.",[10,119,121],{"id":120},"changer-de-branche","Changer de branche",[61,123,125],{"className":63,"code":124,"language":65,"meta":66,"style":66},"git switch main\n",[22,126,127],{"__ignoreMap":66},[70,128,129,131,133],{"class":72,"line":73},[70,130,77],{"class":76},[70,132,81],{"class":80},[70,134,135],{"class":80}," main\n",[41,137,138,139,141,142,144],{},"Git remet les fichiers du dossier dans l'état du dernier commit de ",[22,140,24],{},". Ton travail sur ",[22,143,110],{}," n'est pas perdu : il t'attend sur sa branche.",[146,147,148],"tip",{},[41,149,150,151,154],{},"Fais un commit, ou au moins un ",[22,152,153],{},"git status",", avant de changer de branche. Si des modifications non enregistrées entrent en conflit avec l'autre branche, Git refuse de changer pour ne rien écraser.",[41,156,157,158,161,162,165],{},"Tu verras aussi ",[22,159,160],{},"git checkout"," dans beaucoup de tutoriels. Cette commande reste valable, mais elle fait beaucoup de choses différentes. ",[22,163,164],{},"git switch"," est la commande recommandée pour changer de branche.",[10,167,169],{"id":168},"lister-les-branches","Lister les branches",[61,171,173],{"className":63,"code":172,"language":65,"meta":66,"style":66},"git branch\n",[22,174,175],{"__ignoreMap":66},[70,176,177,179],{"class":72,"line":73},[70,178,77],{"class":76},[70,180,181],{"class":80}," branch\n",[41,183,184],{},"La branche où tu te trouves est marquée d'une étoile. Pour supprimer une branche déjà fusionnée :",[61,186,188],{"className":63,"code":187,"language":65,"meta":66,"style":66},"git branch -d recherche\n",[22,189,190],{"__ignoreMap":66},[70,191,192,194,197,200],{"class":72,"line":73},[70,193,77],{"class":76},[70,195,196],{"class":80}," branch",[70,198,199],{"class":84}," -d",[70,201,88],{"class":80},[41,203,204],{},"Seule l'étiquette disparaît. Les commits restent dans l'historique de la branche où ils ont été fusionnés.",[10,206,208],{"id":207},"fusionner-avec-git-merge","Fusionner avec git merge",[41,210,211],{},"Pour réunir deux branches, place-toi sur celle qui doit recevoir le travail, puis fusionne l'autre :",[61,213,215],{"className":63,"code":214,"language":65,"meta":66,"style":66},"git switch main\ngit merge recherche\n",[22,216,217,225],{"__ignoreMap":66},[70,218,219,221,223],{"class":72,"line":73},[70,220,77],{"class":76},[70,222,81],{"class":80},[70,224,135],{"class":80},[70,226,228,230,233],{"class":72,"line":227},2,[70,229,77],{"class":76},[70,231,232],{"class":80}," merge",[70,234,88],{"class":80},[41,236,237],{},"Selon l'historique, Git fait l'une de ces deux choses.",[239,240,242],"h3",{"id":241},"le-commit-de-fusion","Le commit de fusion",[41,244,245,246,248,249,251],{},"Si ",[22,247,24],{}," a reçu des commits pendant que tu travaillais sur ",[22,250,110],{},", les deux histoires ont divergé. Git crée alors un commit de fusion, qui a deux parents. Suis le scénario complet :",[253,254],"git-graphe",{"scenario":255},"branches",[239,257,259],{"id":258},"lavance-rapide","L'avance rapide",[41,261,245,262,264,265,267,268,271],{},[22,263,24],{}," n'a pas bougé depuis la création de la branche, rien ne diverge. Git avance simplement l'étiquette ",[22,266,24],{}," jusqu'au dernier commit de la branche, sans créer de commit de fusion. On parle d'avance rapide (",[104,269,270],{},"fast-forward",").",[253,273],{"scenario":274},"avance-rapide",[10,276,278],{"id":277},"les-conflits","Les conflits",[41,280,281],{},"Parfois, les deux branches ont modifié les mêmes lignes du même fichier. Git ne peut pas deviner laquelle garder : il s'arrête et annonce un conflit. Ce n'est pas une erreur grave, juste une question qu'il te pose.",[239,283,285],{"id":284},"lire-un-conflit","Lire un conflit",[41,287,288,290],{},[22,289,153],{}," liste les fichiers en conflit. Dans chacun, Git a inséré des marqueurs :",[61,292,294],{"className":63,"code":293,"language":65,"meta":66,"style":66},"\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n\u003Ch1>Bienvenue sur mon portfolio\u003C\u002Fh1>\n=======\n\u003Ch1>Mon portfolio\u003C\u002Fh1>\n>>>>>>> recherche\n",[22,295,296,311,332,338,356],{"__ignoreMap":66},[70,297,298,302,304,307],{"class":72,"line":73},[70,299,301],{"class":300},"sOnC1","\u003C\u003C\u003C",[70,303,301],{"class":300},[70,305,306],{"class":80},"\u003C",[70,308,310],{"class":309},"scfrF"," HEAD\n",[70,312,313,315,318,321,324,326,329],{"class":72,"line":227},[70,314,306],{"class":300},[70,316,317],{"class":309},"h",[70,319,320],{"class":300},"1>",[70,322,323],{"class":309},"Bienvenue sur mon portfolio",[70,325,306],{"class":300},[70,327,328],{"class":309},"\u002Fh",[70,330,331],{"class":300},"1>\n",[70,333,335],{"class":72,"line":334},3,[70,336,337],{"class":80},"=======\n",[70,339,341,343,345,347,350,352,354],{"class":72,"line":340},4,[70,342,306],{"class":300},[70,344,317],{"class":309},[70,346,320],{"class":300},[70,348,349],{"class":309},"Mon portfolio",[70,351,306],{"class":300},[70,353,328],{"class":309},[70,355,331],{"class":300},[70,357,359,362],{"class":72,"line":358},5,[70,360,361],{"class":309},">>>>>>> ",[70,363,364],{"class":76},"recherche\n",[15,366,367,380],{},[18,368,369,370,373,374,377,378,25],{},"Entre ",[22,371,372],{},"\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD"," et ",[22,375,376],{},"======="," : la version de ta branche actuelle, ici ",[22,379,24],{},[18,381,369,382,373,384,387],{},[22,383,376],{},[22,385,386],{},">>>>>>> recherche"," : la version de la branche que tu fusionnes.",[239,389,391],{"id":390},"résoudre-un-conflit","Résoudre un conflit",[393,394,395,398,401],"ol",{},[18,396,397],{},"Ouvre le fichier et choisis le bon contenu : l'une des versions, l'autre, ou un mélange des deux.",[18,399,400],{},"Supprime les trois lignes de marqueurs.",[18,402,403],{},"Indique à Git que le conflit est réglé, puis termine la fusion :",[61,405,407],{"className":63,"code":406,"language":65,"meta":66,"style":66},"git add index.html\ngit commit\n",[22,408,409,419],{"__ignoreMap":66},[70,410,411,413,416],{"class":72,"line":73},[70,412,77],{"class":76},[70,414,415],{"class":80}," add",[70,417,418],{"class":80}," index.html\n",[70,420,421,423],{"class":72,"line":227},[70,422,77],{"class":76},[70,424,425],{"class":80}," commit\n",[41,427,428],{},"Git propose un message de fusion déjà rempli : tu peux le garder tel quel.",[430,431,432],"note",{},[41,433,434],{},"Les éditeurs comme VS Code repèrent ces marqueurs et proposent des boutons pour garder une version ou l'autre. Le principe reste le même.",[41,436,437],{},"Si tu préfères tout annuler et revenir à l'état d'avant la fusion :",[61,439,441],{"className":63,"code":440,"language":65,"meta":66,"style":66},"git merge --abort\n",[22,442,443],{"__ignoreMap":66},[70,444,445,447,449],{"class":72,"line":73},[70,446,77],{"class":76},[70,448,232],{"class":80},[70,450,451],{"class":84}," --abort\n",[453,454,455],"warning",{},[41,456,457,458,461,462,465,466,469],{},"Avant de faire ",[22,459,460],{},"git add",", vérifie qu'il ne reste aucun marqueur ",[22,463,464],{},"\u003C\u003C\u003C\u003C\u003C\u003C\u003C"," ou ",[22,467,468],{},">>>>>>>"," dans le fichier. Sinon, ils partent dans le commit et cassent ta page.",[10,471,473],{"id":472},"à-retenir","À retenir",[15,475,476,479,489,494,502],{},[18,477,478],{},"Une branche est une étiquette sur un commit : la créer est instantané et ne copie rien.",[18,480,481,484,485,488],{},[22,482,483],{},"git switch -c nom"," crée une branche et s'y place, ",[22,486,487],{},"git switch nom"," change de branche.",[18,490,491,493],{},[22,492,34],{}," fusionne en avance rapide si rien n'a divergé, sinon avec un commit de fusion.",[18,495,496,497,373,499,25],{},"Un conflit se résout en éditant le fichier, en retirant les marqueurs, puis ",[22,498,460],{},[22,500,501],{},"git commit",[18,503,504,507],{},[22,505,506],{},"git merge --abort"," annule une fusion en cours.",[509,510,511],"style",{},"html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}",{"title":66,"searchDepth":227,"depth":334,"links":513},[514,515,516,517,518,519,523,527],{"id":12,"depth":227,"text":13},{"id":38,"depth":227,"text":39},{"id":58,"depth":227,"text":59},{"id":120,"depth":227,"text":121},{"id":168,"depth":227,"text":169},{"id":207,"depth":227,"text":208,"children":520},[521,522],{"id":241,"depth":334,"text":242},{"id":258,"depth":334,"text":259},{"id":277,"depth":227,"text":278,"children":524},[525,526],{"id":284,"depth":334,"text":285},{"id":390,"depth":334,"text":391},{"id":472,"depth":227,"text":473},"Créer une branche pour travailler à part, changer de branche, fusionner avec git merge, puis lire et résoudre un conflit.","md",{},[532,164,533,34,534,535,270,536],"branche","git branch","fusion","avance rapide","conflit",true,"debutant","\u002Fgit\u002Fbranches",[541],"\u002Fgit\u002Fpremiers-commits",[543,547],{"nom":544,"url":545,"type":546},"Pro Git en français (2e édition, 2014), chapitre « Les branches avec Git »","https:\u002F\u002Fgit-scm.com\u002Fbook\u002Ffr\u002Fv2","doc",{"nom":548,"url":549,"type":550},"OpenClassrooms, Gérez du code avec Git et GitHub","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F7162856-gerez-du-code-avec-git-et-github","cours",{"title":5,"description":528},[553],{"nom":554,"url":555},"Documentation de référence Git (en anglais)","https:\u002F\u002Fgit-scm.com\u002Fdocs","git\u002F03.branches","WOQcc_GWHK-8ZuFu45VSYbl1ChlvYxRMMgb-N8qXa8c",[559,563,566,567,571,575,579],{"path":560,"title":561,"stem":562},"\u002Fgit\u002Fpourquoi-git","Pourquoi Git","git\u002F01.pourquoi-git",{"path":541,"title":564,"stem":565},"Premiers commits","git\u002F02.premiers-commits",{"path":539,"title":5,"stem":556},{"path":568,"title":569,"stem":570},"\u002Fgit\u002Ftravailler-a-plusieurs","Travailler à plusieurs","git\u002F04.travailler-a-plusieurs",{"path":572,"title":573,"stem":574},"\u002Fgit\u002Fannuler","Annuler une erreur","git\u002F05.annuler",{"path":576,"title":577,"stem":578},"\u002Fgit\u002Frebase","Le rebase","git\u002F06.rebase",{"path":580,"title":581,"stem":582},"\u002Fgit","Git","git\u002Findex",[584,586],{"title":564,"path":541,"stem":565,"description":585,"children":-1},"Le cycle de base de Git, status, add, commit, puis log et diff pour relire l'historique, avec un .gitignore et de bons messages.",{"title":569,"path":568,"stem":570,"description":587,"children":-1},"Relier ton dépôt à un dépôt distant, cloner, envoyer et récupérer des commits avec push, fetch et pull, et proposer tes changements par pull request.",[589],{"path":541,"title":564,"ligne":77},[591,592,593,594,596,597,599],{"path":560,"title":561,"niveau":538,"stem":562},{"path":541,"title":564,"niveau":538,"stem":565},{"path":539,"title":5,"niveau":538,"stem":556},{"path":568,"title":569,"niveau":595,"stem":570},"intermediaire",{"path":572,"title":573,"niveau":595,"stem":574},{"path":576,"title":577,"niveau":598,"stem":578},"avance",{"path":580,"title":581,"niveau":600,"stem":582},"memo",1794583450872]