[{"data":1,"prerenderedAt":40},["ShallowReactive",2],{"doc:fr:git":3},{"title":4,"lede":5,"html":6,"headings":7},"Git : changements, diff et commit","Cette page explique comment voir ce que tes agents ont modifié, lire un diff, commiter, parcourir l’historique du dépôt et afficher la conversation et les fichiers côte à côte.","\u003Ch2 id=\"le-panneau-des-fichiers-non-commites\">Le panneau des fichiers non commités\u003C\u002Fh2>\n\u003Cp>Le panneau s’ouvre à droite de la conversation d’un agent. Dans la disposition classique, le compteur « Fichiers ▸ » de l’en-tête de la conversation l’ouvre et le ferme, comme \u003Ccode class=\"key\">Ctrl+Maj+B\u003C\u002Fcode> (\u003Ccode class=\"key\">⇧⌘B\u003C\u002Fcode> sous macOS) ; la croix du panneau le referme. Il a deux onglets : « Non commités », suivi du nombre de fichiers, et « Historique », décrit \u003Ca href=\"#historique-et-git-graph\">plus bas\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Sous les onglets, deux boutons choisissent ce que la liste montre :\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Bouton\u003C\u002Fth>\n\u003Cth>Ce que tu vois\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>« Cet agent »\u003C\u002Ftd>\n\u003Ctd>Les fichiers de l’agent. S’il a un \u003Ca href=\"\u002Fdocs\u002Fworktrees\u002F\">worktree\u003C\u002Fa>, ceux de son worktree (« worktree .claude\u002Fworktrees\u002Frefacto-auth · isolé des autres agents »). Sinon, les fichiers qu’il a modifiés dans le dossier du projet, d’après ses éditions.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Tout le projet »\u003C\u002Ftd>\n\u003Ctd>Les fichiers du dossier du projet et ceux du worktree de chaque agent, chacun étiqueté du nom de l’agent à qui il appartient.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Chaque ligne donne la lettre de l’état du fichier (\u003Ccode class=\"key\">M\u003C\u002Fcode> modifié en ambre, \u003Ccode class=\"key\">A\u003C\u002Fcode> ajouté en vert, \u003Ccode class=\"key\">D\u003C\u002Fcode> supprimé en rouge), son nom, son dossier, puis le nombre de lignes ajoutées (\u003Ccode class=\"key\">+29\u003C\u002Fcode>) et supprimées (\u003Ccode class=\"key\">−3\u003C\u002Fcode>). Un fichier nouveau et pas encore suivi par git compte comme ajouté. La liste se met à jour toute seule pendant que l’agent travaille, et dès que quelque chose change dans le dossier. Elle affiche au plus 500 lignes, puis « … et N autres fichiers » ; le diff et le commit portent sur tous les fichiers.\u003C\u002Fp>\n\u003Cp>Quand il n’y a rien, la liste dit « Aucun fichier modifié par cet agent. » ou « Aucune modification non commitée. »\u003C\u002Fp>\n\u003Ch3 id=\"ce-qu-on-peut-faire-d-un-fichier\">Ce qu’on peut faire d’un fichier\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Un clic sur une ligne ouvre son diff (disposition classique) ou l’affiche sous la liste (\u003Ca href=\"#cote-a-cote-conversation-et-fichiers\">disposition côte à côte\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>Le bouton \u003Ccode class=\"key\">&lt;\u002F&gt;\u003C\u002Fcode> qui apparaît à droite de la ligne quand tu la survoles, ou « Ouvrir dans l’éditeur » dans son menu (clic droit), ouvre le fichier dans \u003Ca href=\"\u002Fdocs\u002Feditor\u002F\">l’éditeur\u003C\u002Fa>, dans le worktree de l’agent s’il en a un. Pour un fichier supprimé, le bouton n’existe pas et l’entrée du menu est grisée.\u003C\u002Fli>\n\u003Cli>Le clic droit propose aussi de défaire le fichier :\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Entrée du menu\u003C\u002Fth>\n\u003Cth>Pour un fichier…\u003C\u002Fth>\n\u003Cth>Ce qui se passe\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>« Abandonner les modifications… »\u003C\u002Ftd>\n\u003Ctd>modifié\u003C\u002Ftd>\n\u003Ctd>Après confirmation, il revient à son état du dernier commit : ses modifications non commitées sont perdues.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Supprimer le fichier… »\u003C\u002Ftd>\n\u003Ctd>ajouté\u003C\u002Ftd>\n\u003Ctd>Après confirmation, il est supprimé du disque, sans retour possible, parce qu’il n’a jamais été commité.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Restaurer le fichier »\u003C\u002Ftd>\n\u003Ctd>supprimé\u003C\u002Ftd>\n\u003Ctd>Il revient à son état du dernier commit, sans confirmation.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cdiv class=\"callout warning\">\u003Cp class=\"callout-title\">Attention\u003C\u002Fp>\u003Cp>« Abandonner les modifications » et « Supprimer le fichier » ne passent pas par la corbeille : on ne revient pas en arrière.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch3 id=\"les-boutons-du-bas\">Les boutons du bas\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>« Voir le diff » ouvre la \u003Ca href=\"#la-visionneuse-de-diff\">visionneuse\u003C\u002Fa> sur tous les fichiers de la liste (pour « Tout le projet », ceux du projet et de chaque worktree).\u003C\u002Fli>\n\u003Cli>« Commit… » (« Cet agent ») ou « Commit tout… » (« Tout le projet ») lance \u003Ca href=\"#commiter\">un commit\u003C\u002Fa>. Les boutons sont grisés quand la liste est vide.\u003C\u002Fli>\n\u003Cli>Pour un agent qui a un worktree, « Merger escouade\u002Frefacto-auth → main… » fusionne son travail dans sa branche de base, et « Intégrer main » y fait entrer la base : voir \u003Ca href=\"\u002Fdocs\u002Fworktrees\u002F\">un worktree par agent\u003C\u002Fa> et \u003Ca href=\"\u002Fdocs\u002Fbranches\u002F\">les branches\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"la-visionneuse-de-diff\">La visionneuse de diff\u003C\u002Fh2>\n\u003Cp>La visionneuse est une grande fenêtre. Elle s’ouvre avec « Voir le diff », par un clic sur un fichier de la liste (disposition classique), par un clic sur un commit de l’historique ou par une comparaison de branches. Son titre dit ce qu’elle montre (« Modifications de refacto-auth », « 4f2a9c1 · feat: pagination », « main ↔ feat\u002Flogin ») et le nombre de fichiers. Avec plusieurs fichiers, la liste est à gauche, avec l’état de chacun, son chemin, l’agent à qui il appartient et ses lignes \u003Ccode class=\"key\">+\u003C\u002Fcode>\u002F\u003Ccode class=\"key\">−\u003C\u002Fcode> ; le diff du fichier choisi est à droite. \u003Ccode class=\"key\">Échap\u003C\u002Fcode> ou la croix la ferme.\u003C\u002Fp>\n\u003Cp>Deux présentations, au choix avec les boutons « Unifié » et « Côte à côte » :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>« Unifié » : une seule colonne, avec les numéros de l’ancienne et de la nouvelle ligne, et un signe \u003Ccode class=\"key\">+\u003C\u002Fcode> ou \u003Ccode class=\"key\">−\u003C\u002Fcode> devant chaque ligne changée ;\u003C\u002Fli>\n\u003Cli>« Côte à côte » : l’ancienne version à gauche, la nouvelle à droite, les lignes appariées l’une en face de l’autre. Les longues lignes passent à la ligne pour que les deux colonnes restent alignées.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Le choix est gardé d’une session à l’autre. Il vaut partout : la visionneuse, le diff du fichier choisi dans le panneau et les diffs que la conversation montre sous les appels d’outils d’édition de l’agent.\u003C\u002Fp>\n\u003Cp>Quelques cas particuliers :\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Ce que dit la visionneuse\u003C\u002Fth>\n\u003Cth>Pourquoi\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>« Aucune différence. »\u003C\u002Ftd>\n\u003Ctd>Le fichier est revenu à son état d’origine.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Fichier binaire. »\u003C\u002Ftd>\n\u003Ctd>Le fichier est binaire : il n’y a pas de diff à lire.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Diff trop volumineux pour être affiché. »\u003C\u002Ftd>\n\u003Ctd>Le diff de ce fichier dépasse environ 4 Mo.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Diff volumineux (N lignes) » et le bouton « Afficher »\u003C\u002Ftd>\n\u003Ctd>Le diff a plus de 1 500 lignes. Il reste replié tant que tu ne le demandes pas.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Un diff déplié s’affiche par tranches de 500 lignes : le bouton « Afficher 500 lignes de plus » ajoute la suivante.\u003C\u002Fp>\n\u003Ch2 id=\"commiter\">Commiter\u003C\u002Fh2>\n\u003Cp>Les boutons « Commit… » et « Commit tout… » du panneau suivent le réglage « Commit » du projet (Réglages › Projets, groupe « Git »). Il a deux valeurs : « Rédigé par l’agent », par défaut, et « Direct, avec un message proposé ». La liste complète des réglages du projet est dans \u003Ca href=\"\u002Fdocs\u002Fsettings-projects\u002F\">les réglages des projets\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"faire-commiter-l-agent\">Faire commiter l’agent\u003C\u002Fh3>\n\u003Cp>C’est le comportement par défaut. « Commit… » envoie un message à l’agent : il doit commiter les modifications qu’il a faites dans le dépôt, avec un message clair au format Conventional Commits, n’inclure que les fichiers qu’il a modifiés et faire plusieurs commits s’il y a plusieurs sujets. Un message « Demande de commit envoyée à refacto-auth » le confirme, et la suite se passe dans la conversation, comme pour tout message : l’agent peut demander des autorisations, par exemple pour lancer \u003Ccode class=\"key\">git\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>« Commit tout… » demande à l’agent choisi de commiter toutes les modifications en cours du dépôt, regroupées en commits cohérents. Il faut donc qu’un agent soit sélectionné.\u003C\u002Fp>\n\u003Cp>Le message est envoyé dans la langue réglée par « Langue des textes rédigés par Claude » (voir \u003Ca href=\"\u002Fdocs\u002Fsettings-application\u002F\">les réglages de l’application\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch3 id=\"commiter-toi-meme-avec-un-message-propose\">Commiter toi-même, avec un message proposé\u003C\u002Fh3>\n\u003Cp>Avec « Direct, avec un message proposé », « Commit… » ouvre la fenêtre « Commit ». Elle indique ce qui est commité (« Modifications de refacto-auth »), liste les fichiers du commit et propose le champ « Message ».\u003C\u002Fp>\n\u003Col>\n\u003Cli>Haiku lit la liste des fichiers et leur diff, ainsi que les derniers sujets de commit du dépôt, et propose un message dans le même style (« Haiku rédige le message… »). Ça peut prendre quelques secondes, 90 au plus.\u003C\u002Fli>\n\u003Cli>Relis le message et corrige-le comme tu veux. Si tu commences à écrire avant l’arrivée de la proposition, elle ne remplace pas ton texte. « Régénérer » en demande une autre, qui remplace le contenu du champ.\u003C\u002Fli>\n\u003Cli>« Commiter » crée le commit, ferme la fenêtre et affiche « Commit 4f2a9c1 créé ».\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Ce que tu dois savoir :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Rien n’est commité sans que tu cliques « Commiter ».\u003C\u002Fli>\n\u003Cli>Le commit prend exactement les fichiers de la liste, nouveaux, modifiés et supprimés, et rien d’autre : ce qui était déjà indexé par ailleurs reste indexé, hors du commit. La liste n’a pas de cases à cocher : le commit prend tous les fichiers listés.\u003C\u002Fli>\n\u003Cli>Les hooks git s’exécutent. Si l’un refuse le commit, son message s’affiche dans la fenêtre, avec ton texte intact.\u003C\u002Fli>\n\u003Cli>Si Haiku ne propose rien, la fenêtre dit « Pas de proposition : … » et tu écris le message.\u003C\u002Fli>\n\u003Cli>« Cet agent » commite le worktree de l’agent, ou les fichiers qu’il a modifiés dans le dossier du projet. « Tout le projet » commite le dossier du projet seul : le worktree d’un agent se commite depuis « Cet agent ».\u003C\u002Fli>\n\u003Cli>Les fichiers que le projet copie dans ses worktrees (les \u003Ccode class=\"key\">.env*\u003C\u002Fcode>, par défaut) ne sont jamais commités. La fenêtre le dit (« Jamais commité : .env (copié dans les worktrees). ») et leur contenu n’est pas montré à Haiku.\u003C\u002Fli>\n\u003Cli>Par défaut, le message proposé reprend la langue des derniers commits du dépôt. Si tu règles « Langue des textes rédigés par Claude », c’est cette langue qui est demandée.\u003C\u002Fli>\n\u003Cli>Fermer la fenêtre avec un message que tu as écrit ou modifié demande confirmation (« Abandonner le message ? »).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"historique-et-git-graph\">Historique et git graph\u003C\u002Fh2>\n\u003Cp>L’onglet « Historique » dessine le graphe de tout le dépôt : les 300 derniers commits de toutes les branches, locales et distantes, et les tags, avec les lignes qui montrent d’où chaque branche part et où elle est mergée. Chaque ligne donne le commit, ses étiquettes, son sujet et son âge ; le survol d’un commit affiche son hash court et son auteur.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>La branche de l’agent est mise en avant : ses commits sont en pleine couleur, avec un point plus gros, et le reste est estompé. Au premier affichage, la liste défile jusqu’à elle. Sans agent à worktree, c’est la branche du dossier du projet qui est mise en avant.\u003C\u002Fli>\n\u003Cli>Les étiquettes distinguent la branche en cours (en couleur d’accent), les branches d’agents (affichées sous le nom de l’agent), les branches distantes (contour) et les tags.\u003C\u002Fli>\n\u003Cli>Un clic sur un commit ouvre son diff dans la \u003Ca href=\"#la-visionneuse-de-diff\">visionneuse\u003C\u002Fa>. Pour un commit de merge, le diff est celui par rapport au premier parent.\u003C\u002Fli>\n\u003Cli>Un clic droit (ou la touche Menu, ou \u003Ccode class=\"key\">Maj+F10\u003C\u002Fcode>) ouvre le menu du commit.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Entrée du menu\u003C\u002Fth>\n\u003Cth>Effet\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>« Créer une branche ici… »\u003C\u002Ftd>\n\u003Ctd>Ouvre « Nouvelle branche », qui part de ce commit.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Passer sur feat\u002Flogin »\u003C\u002Ftd>\n\u003Ctd>Bascule le dossier du projet sur cette branche locale. Une entrée par branche locale qui pointe sur le commit, sauf celle du dossier du projet.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Comparer avec la branche courante » (« Comparer avec HEAD » sur une HEAD détachée)\u003C\u002Ftd>\n\u003Ctd>Ouvre la visionneuse avec ce qui change entre la branche courante et ce commit, titrée « main ↔ feat\u002Flogin ». L’entrée est absente sur le commit où le dossier du projet se trouve.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>« Supprimer la branche… »\u003C\u002Ftd>\n\u003Ctd>Supprime une branche locale qui pointe sur le commit (pas celle du dossier du projet), après confirmation. Avec plusieurs branches sur le commit, l’entrée nomme celle qu’elle supprime.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Une branche tenue par le worktree d’un agent ne peut ni recevoir de bascule ni être supprimée : l’entrée est grisée et dit pourquoi. Les questions que posent ces actions (changements non commités, branche pas encore mergée) sont décrites dans \u003Ca href=\"\u002Fdocs\u002Fbranches\u002F\">les branches\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"cote-a-cote-conversation-et-fichiers\">Côte à côte : conversation et fichiers\u003C\u002Fh2>\n\u003Cp>\u003Ccode class=\"key\">Ctrl+Maj+L\u003C\u002Fcode> (\u003Ccode class=\"key\">⇧⌘L\u003C\u002Fcode> sous macOS), ou le bouton « Conversation et fichiers côte à côte » à droite de l’en-tête de la conversation, change la disposition. Le bouton voisin, « Disposition classique », revient en arrière. Le choix est gardé d’un redémarrage à l’autre.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fimages\u002Fgit.jpg\" alt=\"La conversation d’un agent à gauche, ses fichiers modifiés et le diff d’un fichier côte à côte à droite\" width=\"1920\" height=\"960\" loading=\"lazy\" decoding=\"async\">\u003C\u002Fp>\n\u003Cp>Dans cette disposition, la conversation prend la moitié gauche et le panneau, toujours affiché, la moitié droite. La liste des fichiers est en haut (environ un tiers de la hauteur au plus), le diff du fichier choisi est en dessous, sur toute la largeur disponible. Un clic sur une ligne change de fichier ; le premier est choisi au départ, et le fichier choisi reste affiché quand la liste change. Liste et diff se rafraîchissent pendant que l’agent travaille : tu lis ses modifications au fur et à mesure.\u003C\u002Fp>\n\u003Cp>Le panneau étant toujours là, \u003Ccode class=\"key\">Ctrl+Maj+B\u003C\u002Fcode> n’a plus d’effet et « Fichiers » devient un simple compteur dans l’en-tête. Les onglets « Non commités » et « Historique », les boutons du bas et la visionneuse (« Voir le diff ») sont les mêmes.\u003C\u002Fp>\n\u003Ch2 id=\"les-modifications-du-projet-d-un-coup-d-oeil\">Les modifications du projet d’un coup d’œil\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>L’onglet de chaque projet affiche « Δ 7 » quand le projet a des fichiers non commités (l’info-bulle dit « Modifications git non commitées »). Le nombre compte les fichiers modifiés, ajoutés ou supprimés dans le dossier du projet et dans les worktrees de ses agents. Il disparaît à zéro.\u003C\u002Fli>\n\u003Cli>Dans la barre latérale, chaque carte d’agent indique son nombre de fichiers (« 6 fich. »), et le pied de la barre détaille les totaux du projet (« ~2 modifiés », « +1 ajoutés », « −0 supprimés »).\u003C\u002Fli>\n\u003Cli>La branche du dossier du projet, avec son avance et son retard sur le dépôt distant, est dans la barre d’état : c’est le bouton qui ouvre \u003Ca href=\"\u002Fdocs\u002Fbranches\u002F\">le sélecteur de branches\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n",[8,12,16,19,22,25,28,31,34,37],{"id":9,"text":10,"depth":11},"le-panneau-des-fichiers-non-commites","Le panneau des fichiers non commités",2,{"id":13,"text":14,"depth":15},"ce-qu-on-peut-faire-d-un-fichier","Ce qu’on peut faire d’un fichier",3,{"id":17,"text":18,"depth":15},"les-boutons-du-bas","Les boutons du bas",{"id":20,"text":21,"depth":11},"la-visionneuse-de-diff","La visionneuse de diff",{"id":23,"text":24,"depth":11},"commiter","Commiter",{"id":26,"text":27,"depth":15},"faire-commiter-l-agent","Faire commiter l’agent",{"id":29,"text":30,"depth":15},"commiter-toi-meme-avec-un-message-propose","Commiter toi-même, avec un message proposé",{"id":32,"text":33,"depth":11},"historique-et-git-graph","Historique et git graph",{"id":35,"text":36,"depth":11},"cote-a-cote-conversation-et-fichiers","Côte à côte : conversation et fichiers",{"id":38,"text":39,"depth":11},"les-modifications-du-projet-d-un-coup-d-oeil","Les modifications du projet d’un coup d’œil",1791926754940]