zshell

Panneau Git

Indexez, examinez, validez et poussez les changements à côté du shell qui les a produits.

Appuyez sur Cmd+Shift+G. Le panneau s'ouvre sur le dépôt auquel votre projet est rattaché ; la page Répertoire du projet explique comment Zshell le détermine.

Chaque action correspond à une commande Git exécutée pour vous. Si son résultat nécessite plus qu'une simple confirmation, sa sortie vous est présentée. Aucun historique n'est réécrit, aucun commit regroupé et aucune poussée forcée effectuée sans votre demande.

Barre d'outils Git

Zshell peut afficher une barre d'outils compacte sous l'onglet actif. Dans un dépôt, elle indique la branche actuelle et les totaux de lignes ajoutées ou supprimées. Un arbre sans modifications affiche l'état vert Propre. Les fichiers non suivis sont inclus dans le nombre de lignes ajoutées.

  • Cliquez sur la branche pour rechercher et sélectionner une branche locale. La branche par défaut du dépôt est signalée dans la liste.
  • Cliquez sur le nombre de changements pour ouvrir le panneau Git.
  • Hors d'un dépôt, le mode Toujours afficher conserve un bouton Aucun dépôt Git qui ouvre le panneau à l'étape d'initialisation.

Choisissez Masquer, Automatique ou Toujours afficher dans Réglages → Général, ou définissez toolbar.visibility. La valeur par défaut est Masquer. Le menu contextuel d'une barre visible permet aussi de la masquer.

Fichiers modifiés

Les fichiers sont regroupés en conflits, changements indexés et changements non indexés. Survolez une ligne pour afficher ses boutons, ou ouvrez son menu contextuel :

BoutonEffet
+Indexer le fichier
−Retirer le fichier de l'index
↺Abandonner ses modifications

Abandonner toutes les modifications, dans l'en-tête du panneau, demande d'abord confirmation. C'est l'action de cette liste qui ne peut pas être annulée par une autre commande Git.

Les fichiers en conflit proposent Marquer comme résolu (indexer) à la place du simple bouton d'indexation : la résolution reste une décision explicite.

Le bouton en forme d'entonnoir filtre les fichiers par nom, ce qui facilite la navigation dans les changements importants.

Lire les diffs

Cliquez sur un fichier modifié pour ouvrir son diff dans un volet, à côté du terminal. Le menu contextuel permet également d'ouvrir le fichier lui-même pour l'éditer, ou de l'ouvrir sur le côté.

Les grands diffs restent réactifs. Un ensemble de mille fichiers s'ouvre aussi rapidement qu'une modification d'une ligne, avec un défilement fluide.

Les commandes au-dessus d'un diff mémorisent deux préférences globales :

  • Unifié / Séparé alterne entre une colonne unique et une présentation côte à côte.
  • Révision / Modification apparaît pour un fichier non indexé dans l'arbre de travail actuel. Modifiez directement la nouvelle version puis enregistrez avec Cmd+S. La fermeture d'un fichier modifié suit les mêmes règles que l'éditeur habituel.

Les diffs indexés et ceux des commits historiques restent en lecture seule : ce sont des instantanés, pas des fichiers dans lesquels Zshell peut écrire sans risque. Passer un diff en mode Modification ou Séparé actualise la préférence des autres diffs ouverts, sans rendre modifiable un instantané qui ne l'est pas.

Créer un commit

Saisissez un message et utilisez le bouton de commit, ou son menu :

  • Valider les changements indexés : inclure exactement ce que vous avez indexé.
  • Tout indexer et valider : indexer tous les fichiers suivis, puis créer le commit.
  • Modifier le dernier commit : intégrer les changements indexés au commit précédent.
  • Tout indexer et modifier le dernier commit.

Les commits récents apparaissent en dessous. Leur menu contextuel propose Copier le hash du commit et Copier le message du commit.

Branches

Le nom de la branche dans l'en-tête ouvre un menu. Choisissez une autre branche pour y passer, ou Créer une branche… pour en créer une à partir de la position actuelle.

Arbres de travail

Le panneau Git répertorie tous les arbres de travail du dépôt avec leur branche et le chemin de leur copie de travail. La copie active porte la mention Actuel. Cliquez sur un arbre pour ouvrir un nouvel onglet de terminal dans son répertoire : chaque copie conserve ainsi son contexte de shell tout en appartenant au même projet. Les longues listes défilent dans leur propre zone de hauteur limitée ; l'en-tête, les commandes de commit et la liste des fichiers modifiés restent en place. Cliquez sur le titre des arbres de travail pour réduire ou développer la liste.

Un arbre avec une HEAD détachée affiche HEAD détachée à la place d'un nom de branche. Les dépôts nus figurent aussi dans la liste, mais ils n'ont pas de répertoire de travail et ne peuvent pas être ouverts dans un onglet de terminal.

Sessions de worktree

Dans un terminal d’un dépôt Git local, choisissez Terminal → Nouvelle session dans un worktree… ou appuyez sur Cmd+Opt+T. Les menus contextuels de l’onglet et du bouton + proposent aussi cette action. Choisissez une branche locale nouvelle ou existante et un dossier qui n’existe pas encore. Une nouvelle branche part de la branche par défaut du dépôt ; HEAD actuel reste un choix explicite. Une branche existante conserve son commit actuel. Le dossier proposé se trouve à côté du checkout source.

Les volets divisés héritent de l’association au worktree, que la disposition enregistrée restaure également. Fermer une session associée propose Conserver le worktree, Supprimer le worktree ou Annuler. La suppression exige l’absence de fichiers modifiés, non suivis ou ignorés, de commits non intégrés à la référence enregistrée, de verrou et d’autres sessions ouvertes utilisant ce checkout. La branche Git est toujours conservée.

Un terminal externe peut créer et fermer des sessions avec zshell +session. Passez à --project un ID renvoyé par projects ; dans Zshell, le projet du terminal appelant est utilisé automatiquement. La création se fait en arrière-plan, sauf avec --focus. --base HEAD ou --base REF choisit une autre référence, et --worktree NEW_DIR définit le dossier. --connection FILE sélectionne une instance en cours si nécessaire. La fermeture conserve le worktree sans --remove-worktree explicite ; check indique si le nettoyage est actuellement sûr.

zshell +session projects
zshell +session new --project PROJECT_ID --cwd /path/to/repo --branch feat/task
zshell +session list --project PROJECT_ID
zshell +session check --project PROJECT_ID --session SESSION_ID
zshell +session close --project PROJECT_ID --session SESSION_ID --remove-worktree

Dépôts distants

Le menu ⋯ regroupe les opérations avec un dépôt distant :

ActionEffet
RécupérerActualiser les références de suivi distantes
Tirer (avance rapide uniquement)Récupérer les changements sans créer de commit de fusion
PousserEnvoyer la branche actuelle
Publier la brancheEnvoyer une branche sans branche amont ; choisir le dépôt distant s'il y en a plusieurs
Synchroniser les changementsTirer en avance rapide, puis pousser
Remiser tous les changementsCréer un stash de tous les changements, fichiers non suivis compris
Réappliquer le dernier stashRestaurer le stash le plus récent

Les badges à côté de la branche indiquent les commits ↓ en retard et ↑ en avance sur la branche amont.

Ce même menu propose Copier les chemins modifiés, Copier le chemin du dépôt et Afficher le dépôt dans le Finder.

Le tirage est volontairement limité à l'avance rapide. Si une fusion ou un rebase est nécessaire, Git vous l'indique et vous choisissez la marche à suivre dans le terminal. Le panneau ne choisit pas cette stratégie à votre place.

Aucun dépôt pour le moment

Si le répertoire du projet ne contient pas de dépôt, le panneau propose Initialiser le dépôt, qui exécute git init dans ce dossier. Il reste discret tant que le dépôt n'est pas initialisé.

Révision des tours d’agent

Cliquez sur Examiner les modifications… dans le panneau Git.

  • Dernier tour compare les instantanés de début et de fin de l’agent choisi, y compris toutes les modifications de cet intervalle, quel qu’en soit l’auteur.
  • Non validées compare HEAD à l’arbre de travail, fichiers indexés et non suivis compris.
  • Branche entière compare l’ancêtre commun avec la branche de base choisie à l’arbre de travail, commits et modifications non validées compris.

Choisissez un fichier et un bloc. Conserver le bloc enregistre la révision ; Annuler le bloc inverse ce bloc dans l’arbre de travail. Ces actions du dernier tour ne modifient pas l’index Git. L’instantané original et les décisions restent affichés.

L’annulation est refusée si le fichier ou HEAD a changé, si le chemin est dangereux, si un agent est actif ou si des tours se chevauchent. Les changements binaires ou de permissions sont en lecture seule. Les fichiers dépassant 5 MiB sont indisponibles, comme les instantanés dépassant 2 048 chemins modifiés, 25 MiB de contenu capturé ou le délai de capture.

Les instantanés durent le temps de la session de l’application. Des événements fiables de début et de fin sont requis. Pi, OpenCode et Grok disposent d’intégrations natives. Les prompts protégés capturent le début, mais nécessitent aussi un événement de fin. Sinon, aucun instantané terminé n’est disponible.