[{"data":1,"prerenderedAt":607},["ShallowReactive",2],{"page-\u002Fgit\u002Fpremiers-commits":3,"pieces-git":564,"autour-\u002Fgit\u002Fpremiers-commits":589,"prerequis-\u002Fgit\u002Fpremiers-commits":594,"plan-git":596},{"id":4,"title":5,"body":6,"description":537,"extension":538,"ligne":107,"meta":539,"motsCles":540,"navigation":543,"niveau":544,"path":545,"prerequis":546,"ressources":548,"seo":557,"sources":558,"stem":562,"__hash__":563},"docs\u002Fgit\u002F02.premiers-commits.md","Premiers commits",{"type":7,"value":8,"toc":525},"minimark",[9,14,40,44,60,80,84,90,112,115,141,147,151,176,179,193,196,209,213,232,235,239,246,249,253,257,269,272,287,294,298,310,322,328,343,347,353,380,390,403,415,419,425,452,455,466,475,479,521],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,33],"ul",{},[18,19,20],"li",{},"Le cycle de base : modifier, indexer, valider.",[18,22,23,24,28,29,32],{},"Relire l'historique et les différences avec ",[25,26,27],"code",{},"git log"," et ",[25,30,31],{},"git diff",".",[18,34,35,36,39],{},"Écarter les fichiers inutiles avec ",[25,37,38],{},".gitignore"," et écrire des messages clairs.",[10,41,43],{"id":42},"le-cycle-de-base","Le cycle de base",[45,46,47,48,51,52,55,56,59],"p",{},"Tu reprends le dépôt ",[25,49,50],{},"portfolio"," du chapitre précédent. Crée un fichier ",[25,53,54],{},"index.html"," avec un titre, puis un fichier ",[25,57,58],{},"style.css",". Git ne les enregistre pas tout seul. Le travail suit toujours trois étapes :",[61,62,63,66,73],"ol",{},[18,64,65],{},"Tu modifies des fichiers dans le répertoire de travail.",[18,67,68,69,72],{},"Tu choisis ce qui part dans le prochain commit avec ",[25,70,71],{},"git add"," : les fichiers passent dans l'index.",[18,74,75,76,79],{},"Tu valides avec ",[25,77,78],{},"git commit"," : l'index devient un nouveau commit dans le dépôt local.",[10,81,83],{"id":82},"git-status-où-en-es-tu","git status : où en es-tu ?",[45,85,86,89],{},[25,87,88],{},"git status"," est la commande que tu taperas le plus souvent. Elle ne modifie rien, elle décrit l'état du dépôt :",[91,92,97],"pre",{"className":93,"code":94,"language":95,"meta":96,"style":96},"language-bash shiki shiki-themes github-light-default github-dark-default github-dark-default","git status\n","bash","",[25,98,99],{"__ignoreMap":96},[100,101,104,108],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sIXEE","git",[100,109,111],{"class":110},"shWOn"," status\n",[45,113,114],{},"Elle classe les fichiers en trois groupes :",[15,116,117,129,135],{},[18,118,119,123,124,128],{},[120,121,122],"strong",{},"non suivis"," (",[125,126,127],"em",{},"untracked",") : Git les voit mais ne les a jamais enregistrés ;",[18,130,131,134],{},[120,132,133],{},"modifiés, non indexés"," : ils ont changé depuis le dernier commit, mais ne sont pas dans l'index ;",[18,136,137,140],{},[120,138,139],{},"indexés"," : ils partiront dans le prochain commit.",[45,142,143,144,146],{},"Au moindre doute, tape ",[25,145,88],{},". Git indique souvent la commande à utiliser ensuite.",[10,148,150],{"id":149},"git-add-préparer-le-commit","git add : préparer le commit",[91,152,154],{"className":93,"code":153,"language":95,"meta":96,"style":96},"git add index.html\ngit add style.css\n",[25,155,156,166],{"__ignoreMap":96},[100,157,158,160,163],{"class":102,"line":103},[100,159,107],{"class":106},[100,161,162],{"class":110}," add",[100,164,165],{"class":110}," index.html\n",[100,167,169,171,173],{"class":102,"line":168},2,[100,170,107],{"class":106},[100,172,162],{"class":110},[100,174,175],{"class":110}," style.css\n",[45,177,178],{},"Tu peux aussi tout indexer d'un coup, à partir du dossier courant :",[91,180,182],{"className":93,"code":181,"language":95,"meta":96,"style":96},"git add .\n",[25,183,184],{"__ignoreMap":96},[100,185,186,188,190],{"class":102,"line":103},[100,187,107],{"class":106},[100,189,162],{"class":110},[100,191,192],{"class":110}," .\n",[45,194,195],{},"L'index sert à choisir. Si tu as corrigé le menu et commencé une page contact, tu peux indexer seulement la correction du menu et la valider seule. Chaque commit raconte alors une seule chose.",[197,198,199],"tip",{},[45,200,201,202,205,206,208],{},"Avant un ",[25,203,204],{},"git add .",", lance ",[25,207,88],{},". Tu vérifies ainsi qu'aucun fichier inattendu ne part dans le commit.",[10,210,212],{"id":211},"git-commit-enregistrer-une-version","git commit : enregistrer une version",[91,214,216],{"className":93,"code":215,"language":95,"meta":96,"style":96},"git commit -m \"Ajoute la page d'accueil\"\n",[25,217,218],{"__ignoreMap":96},[100,219,220,222,225,229],{"class":102,"line":103},[100,221,107],{"class":106},[100,223,224],{"class":110}," commit",[100,226,228],{"class":227},"s5iOY"," -m",[100,230,231],{"class":110}," \"Ajoute la page d'accueil\"\n",[45,233,234],{},"Décortiquons cette commande :",[236,237],"anatomie-commande",{"exemple":238},"git-commit",[45,240,241,242,245],{},"L'option ",[25,243,244],{},"-m"," donne le message directement. Sans elle, Git ouvre un éditeur de texte pour que tu l'écrives.",[45,247,248],{},"Chaque nouveau commit pointe vers le précédent. Avance pas à pas dans le schéma pour voir l'historique se construire :",[250,251],"git-graphe",{"scenario":252},"bases",[10,254,256],{"id":255},"git-log-relire-lhistorique","git log : relire l'historique",[91,258,260],{"className":93,"code":259,"language":95,"meta":96,"style":96},"git log\n",[25,261,262],{"__ignoreMap":96},[100,263,264,266],{"class":102,"line":103},[100,265,107],{"class":106},[100,267,268],{"class":110}," log\n",[45,270,271],{},"Pour chaque commit, du plus récent au plus ancien, tu vois l'identifiant, l'auteur, la date et le message. Une version plus compacte, une ligne par commit :",[91,273,275],{"className":93,"code":274,"language":95,"meta":96,"style":96},"git log --oneline\n",[25,276,277],{"__ignoreMap":96},[100,278,279,281,284],{"class":102,"line":103},[100,280,107],{"class":106},[100,282,283],{"class":110}," log",[100,285,286],{"class":227}," --oneline\n",[45,288,289,290,293],{},"Appuie sur ",[25,291,292],{},"q"," pour quitter l'affichage si la liste est longue.",[10,295,297],{"id":296},"git-diff-voir-ce-qui-a-changé","git diff : voir ce qui a changé",[45,299,300,302,303,306,307,32],{},[25,301,31],{}," montre les lignes modifiées qui ne sont pas encore indexées. Les lignes retirées commencent par ",[25,304,305],{},"-",", les lignes ajoutées par ",[25,308,309],{},"+",[91,311,313],{"className":93,"code":312,"language":95,"meta":96,"style":96},"git diff\n",[25,314,315],{"__ignoreMap":96},[100,316,317,319],{"class":102,"line":103},[100,318,107],{"class":106},[100,320,321],{"class":110}," diff\n",[45,323,324,325,327],{},"Une fois les fichiers indexés, ",[25,326,31],{}," n'affiche plus rien pour eux. Pour voir ce qui partira dans le prochain commit :",[91,329,331],{"className":93,"code":330,"language":95,"meta":96,"style":96},"git diff --staged\n",[25,332,333],{"__ignoreMap":96},[100,334,335,337,340],{"class":102,"line":103},[100,336,107],{"class":106},[100,338,339],{"class":110}," diff",[100,341,342],{"class":227}," --staged\n",[10,344,346],{"id":345},"gitignore-ce-que-git-doit-ignorer",".gitignore : ce que Git doit ignorer",[45,348,349,350,352],{},"Certains fichiers n'ont rien à faire dans un dépôt : les dépendances téléchargées, les fichiers générés par le build, les secrets. Liste-les dans un fichier ",[25,351,38],{}," à la racine du projet. Pour un projet Nuxt, par exemple :",[91,354,356],{"className":93,"code":355,"language":95,"meta":96,"style":96},"node_modules\u002F\n.nuxt\u002F\n.output\u002F\n.env\n",[25,357,358,363,368,374],{"__ignoreMap":96},[100,359,360],{"class":102,"line":103},[100,361,362],{"class":106},"node_modules\u002F\n",[100,364,365],{"class":102,"line":168},[100,366,367],{"class":106},".nuxt\u002F\n",[100,369,371],{"class":102,"line":370},3,[100,372,373],{"class":106},".output\u002F\n",[100,375,377],{"class":102,"line":376},4,[100,378,379],{"class":106},".env\n",[45,381,382,383,386,387,389],{},"Chaque ligne est un motif. Un nom qui finit par ",[25,384,385],{},"\u002F"," désigne un dossier. Le fichier ",[25,388,38],{}," lui-même doit être commité, pour que toute l'équipe partage les mêmes règles.",[391,392,393],"warning",{},[45,394,395,396,399,400,402],{},"Un fichier ",[25,397,398],{},".env"," contient souvent des clés d'API ou des mots de passe. Ajoute-le au ",[25,401,38],{}," avant ton premier commit. Une fois un secret commité, il reste dans l'historique même si tu supprimes le fichier ensuite.",[45,404,405,407,408,410,411,414],{},[25,406,38],{}," ne concerne que les fichiers non suivis. Si un fichier est déjà enregistré, l'ajouter au ",[25,409,38],{}," ne suffit pas : il faut aussi le retirer du suivi avec ",[25,412,413],{},"git rm --cached nom-du-fichier",", qui le garde sur ton disque.",[10,416,418],{"id":417},"écrire-de-bons-messages-de-commit","Écrire de bons messages de commit",[45,420,421,422,424],{},"Dans six mois, ",[25,423,27],{}," sera ta seule mémoire du projet. Compare :",[91,426,428],{"className":93,"code":427,"language":95,"meta":96,"style":96},"git commit -m \"modifs\"\ngit commit -m \"Corrige le menu qui se superpose au titre sur mobile\"\n",[25,429,430,441],{"__ignoreMap":96},[100,431,432,434,436,438],{"class":102,"line":103},[100,433,107],{"class":106},[100,435,224],{"class":110},[100,437,228],{"class":227},[100,439,440],{"class":110}," \"modifs\"\n",[100,442,443,445,447,449],{"class":102,"line":168},[100,444,107],{"class":106},[100,446,224],{"class":110},[100,448,228],{"class":227},[100,450,451],{"class":110}," \"Corrige le menu qui se superpose au titre sur mobile\"\n",[45,453,454],{},"Le second dit ce qui a changé et pourquoi. Quelques conventions répandues :",[15,456,457,460,463],{},[18,458,459],{},"une première ligne courte, d'une cinquantaine de caractères ;",[18,461,462],{},"un verbe d'action au début : Ajoute, Corrige, Supprime, Renomme ;",[18,464,465],{},"un commit pour un seul changement logique.",[45,467,468,469,471,472,474],{},"Si tu as besoin d'expliquer davantage, lance ",[25,470,78],{}," sans ",[25,473,244],{},". Dans l'éditeur, écris la ligne courte, laisse une ligne vide, puis le détail.",[10,476,478],{"id":477},"à-retenir","À retenir",[15,480,481,489,494,506,518],{},[18,482,483,484,486,487,32],{},"Le cycle est toujours le même : modifier, ",[25,485,71],{},", ",[25,488,78],{},[18,490,491,493],{},[25,492,88],{}," décrit l'état du dépôt sans rien changer : tape-le souvent.",[18,495,496,499,500,28,502,505],{},[25,497,498],{},"git log --oneline"," résume l'historique, ",[25,501,31],{},[25,503,504],{},"git diff --staged"," montrent les changements.",[18,507,508,509,511,512,515,516,32],{},"Un ",[25,510,38],{}," écarte ",[25,513,514],{},"node_modules\u002F",", les builds et surtout le ",[25,517,398],{},[18,519,520],{},"Un bon message dit ce qui change, en une ligne courte qui commence par un verbe.",[522,523,524],"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 .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 .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}",{"title":96,"searchDepth":168,"depth":370,"links":526},[527,528,529,530,531,532,533,534,535,536],{"id":12,"depth":168,"text":13},{"id":42,"depth":168,"text":43},{"id":82,"depth":168,"text":83},{"id":149,"depth":168,"text":150},{"id":211,"depth":168,"text":212},{"id":255,"depth":168,"text":256},{"id":296,"depth":168,"text":297},{"id":345,"depth":168,"text":346},{"id":417,"depth":168,"text":418},{"id":477,"depth":168,"text":478},"Le cycle de base de Git, status, add, commit, puis log et diff pour relire l'historique, avec un .gitignore et de bons messages.","md",{},[88,71,78,27,31,38,541,542],"message de commit","index",true,"debutant","\u002Fgit\u002Fpremiers-commits",[547],"\u002Fgit\u002Fpourquoi-git",[549,553],{"nom":550,"url":551,"type":552},"Pro Git en français (2e édition, 2014), chapitre « Les bases de Git »","https:\u002F\u002Fgit-scm.com\u002Fbook\u002Ffr\u002Fv2","doc",{"nom":554,"url":555,"type":556},"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":537},[559],{"nom":560,"url":561},"Documentation de référence Git (en anglais)","https:\u002F\u002Fgit-scm.com\u002Fdocs","git\u002F02.premiers-commits","fcJdD53a73b1djazbvD6qZGAJ0uL7_yjoTpfFF4pXTs",[565,568,569,573,577,581,585],{"path":547,"title":566,"stem":567},"Pourquoi Git","git\u002F01.pourquoi-git",{"path":545,"title":5,"stem":562},{"path":570,"title":571,"stem":572},"\u002Fgit\u002Fbranches","Les branches","git\u002F03.branches",{"path":574,"title":575,"stem":576},"\u002Fgit\u002Ftravailler-a-plusieurs","Travailler à plusieurs","git\u002F04.travailler-a-plusieurs",{"path":578,"title":579,"stem":580},"\u002Fgit\u002Fannuler","Annuler une erreur","git\u002F05.annuler",{"path":582,"title":583,"stem":584},"\u002Fgit\u002Frebase","Le rebase","git\u002F06.rebase",{"path":586,"title":587,"stem":588},"\u002Fgit","Git","git\u002Findex",[590,592],{"title":566,"path":547,"stem":567,"description":591,"children":-1},"Le problème des fichiers final_v2_vrai, ce qu'est un dépôt et un commit, et comment installer et configurer Git.",{"title":571,"path":570,"stem":572,"description":593,"children":-1},"Créer une branche pour travailler à part, changer de branche, fusionner avec git merge, puis lire et résoudre un conflit.",[595],{"path":547,"title":566,"ligne":107},[597,598,599,600,602,603,605],{"path":547,"title":566,"niveau":544,"stem":567},{"path":545,"title":5,"niveau":544,"stem":562},{"path":570,"title":571,"niveau":544,"stem":572},{"path":574,"title":575,"niveau":601,"stem":576},"intermediaire",{"path":578,"title":579,"niveau":601,"stem":580},{"path":582,"title":583,"niveau":604,"stem":584},"avance",{"path":586,"title":587,"niveau":606,"stem":588},"memo",1794583450651]