zshell

Pannello Git

Prepara, rivedi, esegui commit e push accanto alla shell che ha prodotto le modifiche.

Premi Cmd+Shift+G. Il pannello si apre sul repository a cui è ancorato il progetto; La directory del progetto spiega come viene scelto.

Ogni azione corrisponde a un comando Git eseguito da Zshell per te. L'output viene mostrato quando c'è altro da dire oltre a “completato”. Nulla viene riscritto, unito con squash o inviato con force push senza una tua richiesta.

La barra degli strumenti Git

Zshell può mostrare una barra compatta sotto la scheda attiva. Nei repository indica branch corrente e conteggi complessivi delle righe aggiunte/eliminate; un albero senza modifiche mostra Pulito in verde. I file non tracciati sono inclusi nelle aggiunte.

  • Fai clic sul branch per cercare e cambiare branch locali. Quello predefinito del repository è contrassegnato.
  • Fai clic sui conteggi per aprire il pannello Git.
  • Fuori da un repository, Mostra sempre mantiene un pulsante Nessun repository Git che apre la schermata di inizializzazione.

Scegli Nascondi, Automatico o Mostra sempre in Impostazioni → Generali, oppure imposta toolbar.visibility. Il valore predefinito è Nascondi. Puoi anche nascondere una barra visibile dal suo menu contestuale.

File modificati

I file sono raggruppati in conflitti, modifiche in staging e modifiche non in staging. Passa il puntatore su una riga per i pulsanti o usa il menu contestuale:

PulsanteFunzione
+Aggiunge il file all'area di staging
−Rimuove il file dallo staging
↺Scarta le modifiche

Scarta tutte le modifiche è nell'intestazione e richiede conferma: è l'azione che non puoi annullare con un altro comando Git.

I file in conflitto mostrano Segna come risolto (staging) al posto del pulsante normale, rendendo la risoluzione un passaggio esplicito.

Il pulsante a imbuto filtra l'elenco per nome, utile per modifiche numerose.

Leggere i diff

Fai clic su un file modificato per aprire il diff in un pannello accanto al terminale. Il menu contestuale offre anche Apri file, modificabile, e Apri file a lato.

I diff grandi restano reattivi. Un insieme di mille file si apre velocemente quanto una modifica di una riga e scorre senza scatti.

I controlli sopra il diff ricordano due scelte globali:

  • Unificato / Affiancato alterna tra una colonna e due viste affiancate.
  • Revisione / Modifica compare per file non in staging nel worktree corrente. Modifica direttamente il lato nuovo e salva con Cmd+S; la chiusura di file non salvati funziona come nell'editor normale.

I diff in staging e dei commit storici restano in sola lettura perché sono snapshot, non file scrivibili in sicurezza. Passare un diff a Modifica o Affiancato aggiorna la preferenza degli altri diff aperti senza rendere modificabile un diff non idoneo.

Commit

Inserisci un messaggio e usa il pulsante commit, oppure il suo menu:

  • Commit delle modifiche in staging — include esattamente ciò che hai preparato;
  • Prepara tutto e fai commit — prepara tutto ciò che è tracciato, poi esegue il commit;
  • Modifica ultimo commit — incorpora le modifiche in staging nel commit precedente;
  • Prepara tutto e modifica ultimo commit.

I commit recenti sono elencati sotto; i menu contestuali includono Copia hash del commit e Copia messaggio del commit.

Branch

Il nome del branch nell'intestazione è un menu. Scegline un altro per passarvi o Crea nuovo branch… per partire dallo stato corrente.

Worktree

Il pannello elenca tutti i worktree del repository, con branch e percorso del checkout. Quello attivo è indicato come Corrente. Fai clic per aprire una nuova scheda terminale in quella directory: ogni checkout mantiene il proprio contesto shell restando nello stesso progetto. Gli elenchi lunghi scorrono in un'area delimitata, lasciando fermi intestazione, controlli di commit e file modificati. Fai clic sull'intestazione dei worktree per comprimere o espandere.

I worktree in detached HEAD mostrano Detached HEAD al posto del nome del branch. I repository bare sono elencati per completezza, ma non hanno directory di lavoro e non possono aprirsi in una scheda terminale.

Sessioni worktree

Da un terminale in un repository Git locale, scegli Terminale → Nuova sessione in un worktree… o premi Cmd+Opt+T. Anche i menu contestuali della scheda e del pulsante + offrono questa azione. Scegli un ramo locale nuovo o esistente e una cartella che non esiste ancora. I nuovi rami partono dal ramo predefinito del repository; HEAD corrente è una scelta esplicita. I rami esistenti mantengono il commit corrente. La cartella suggerita si trova accanto al checkout di origine.

I pannelli divisi ereditano l’associazione al worktree, ripristinata anche dal layout salvato. Alla chiusura di una sessione associata, scegli Mantieni worktree, Rimuovi worktree o Annulla. La rimozione richiede l’assenza di file modificati, non tracciati o ignorati, commit fuori dal riferimento registrato, blocchi e altre sessioni aperte che usano il checkout. Il ramo Git viene sempre mantenuto.

Un terminale esterno può creare e chiudere sessioni con zshell +session. Usa con --project un ID restituito da projects; in Zshell viene usato automaticamente il progetto del terminale chiamante. La creazione avviene in background salvo con --focus. --base HEAD o --base REF sceglie un altro riferimento e --worktree NEW_DIR imposta la cartella. Se necessario, --connection FILE seleziona un’istanza in esecuzione. La chiusura mantiene il worktree senza --remove-worktree esplicito; check indica se la pulizia è sicura.

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

Remoti

Il menu ⋯ raccoglie le operazioni verso i remoti:

AzioneFunzione
FetchAggiorna i riferimenti di tracciamento remoto
Pull (solo fast-forward)Esegue pull senza creare commit di merge
PushInvia il branch corrente
Pubblica branchInvia un branch senza upstream, scegliendo il remoto se ce n'è più di uno
Sincronizza modifichePull fast-forward seguito da push
Stash di tutte le modificheSalva tutto nello stash, inclusi i file non tracciati
Ripristina e rimuovi stashRipristina lo stash più recente

Gli indicatori accanto al branch mostrano quanti commit sei ↓ indietro o ↑ avanti rispetto all'upstream.

Lo stesso menu contiene Copia percorsi modificati, Copia percorso repository e Mostra repository nel Finder.

Il pull è volutamente solo fast-forward. Se serve un vero merge o rebase, Git lo segnala e decidi nel terminale; il pannello non sceglie una strategia al posto tuo.

Non è ancora un repository

Se la directory del progetto non contiene un repository, il pannello offre Inizializza repository, che esegue git init nella cartella. Fino ad allora rimane discreto.

Revisione dei turni degli agenti

Fai clic su Esamina modifiche… nel pannello Git.

  • Ultimo turno confronta le istantanee iniziale e finale dell’agente scelto, includendo tutte le modifiche nell’intervallo, a prescindere dall’autore.
  • Non salvate in commit confronta HEAD con l’albero di lavoro, inclusi file nello staging e non tracciati.
  • Intero branch confronta l’antenato comune con il branch di base scelto e l’albero di lavoro, inclusi commit e modifiche non salvate in commit.

Scegli un file e un blocco. In Ultimo turno, Mantieni blocco registra la revisione; Annulla blocco lo ripristina nell’albero di lavoro. Nessuna azione modifica l’indice Git. L’istantanea originale e le decisioni restano visibili.

Il ripristino viene rifiutato se il file o HEAD è cambiato, il percorso non è sicuro, un agente è attivo o i turni si sovrappongono. Le modifiche binarie o ai soli permessi sono in sola lettura. Non sono disponibili i file oltre 5 MiB né le istantanee oltre 2.048 percorsi modificati, 25 MiB acquisiti o il limite di tempo.

Le istantanee durano per la sessione corrente dell’app. Servono eventi affidabili di inizio e fine. Pi, OpenCode e Grok hanno integrazioni native. I prompt protetti acquisiscono l’inizio, ma richiedono anche un evento di fine. Se manca, non è disponibile un’istantanea completata.