Come faccio a rimuovere in modo interattivo un particolare pezzo in git?


106

In git, se ho un paio di hunk dallo stesso file in stage nel mio indice, come posso rimuovere uno di essi in modo interattivo?

Esiste un'alternativa all'annullamento dello staging dell'intero file e quindi al re-staging degli hunk che voglio mantenere o all'annullamento manuale delle modifiche alla copia di lavoro e quindi all'aggiunta interattiva di quelle modifiche annullate?

Risposte:


136

Prova git reset --patch filename; questo dovrebbe fare l'opposto di git add --patch, secondo la documentazione . La forma abbreviata -pfunziona anche per entrambi i comandi.


Non credo che la mia versione ce l'abbia (è 1.6.3.3), ma questa sembra la risposta corretta.
Andrew Grimm

2
In tal caso (e supponendo che non sia possibile eseguire l'aggiornamento per qualche motivo), suggerisco di utilizzare git stash save --keep-indexper salvare e ripristinare le modifiche alla copia di lavoro corrente. Quindi, puoi reimpostare il tuo file e annullare le modifiche che non desideri. Se copi prima il file in una posizione temporanea, puoi utilizzarlo diffper salvare le modifiche annullate. Quindi, puoi aggiungere nuovamente il file (non è necessaria un'aggiunta interattiva poiché hai nascosto le altre modifiche che non ti interessavano). Utilizzare git stash popper ripristinare le vecchie modifiche e diffper applicare le modifiche annullate. Abbastanza ingombrante ... :-(
Aasmund Eldhuset

The short form -p also works for both commands... Vuoi dire git reset -p filename?
Nawaz

1
@Nawaz: È corretto: mette in git add -p filenamescena selettivamente le modifiche da quel file e git reset -p filenamedisattiva selettivamente le modifiche. C'è anche git checkout -p -- filename, che ti consente di eliminare selettivamente le modifiche da un file. Attenzione: ciascuno di adde resetpuò essere usato per annullare l'altro dei due, ma se usi questa forma di checkoutper scartare una modifica, non puoi recuperarla.
Aasmund Eldhuset,

2

git guiha un'interfaccia grafica decente per mettere in scena o rimuovere in modo interattivo pezzi o linee. Ci sono client GUI più belli / migliori, ma git guiè leggero, integrato e multipiattaforma (lin, win, mac).

https://git-scm.com/docs/git-gui

Basta fare clic con il pulsante destro del mouse su un pezzo per mettere in scena / rimuovere lo scenario. Per le linee, evidenzia prima le linee, quindi fai clic con il pulsante destro del mouse.


-1

GitX ha una bella interfaccia utente per rimuovere lo staging di blocchi di un file: inserisci qui la descrizione dell'immagine

Il client ufficiale non è stato mantenuto per un po ', ma un fork su GitHub con più funzionalità è popolare in alcuni ambienti. ( post sul blog a riguardo )


1
Per gli utenti Windows là fuori, Git Extensions ha un'interfaccia utente altrettanto piacevole.
Aasmund Eldhuset

4
Lo stesso vale per il built-in git gui, tranne che non sono sicuro che
userei

1
SourceTree (Windows + Mac) ha anche una bella interfaccia utente per questo.
Chrnola

Dovrei menzionare i client grafici Git più recenti ora: GitKraken è bellissimo e lo supporta (anche se ora viene fornito con una tariffa elevata per uso commerciale). GitHub Desktop di GitHub è gratuito, bello e supporta facilmente lo staging e l'annullamento dello stage di hunk. GitKraken e GitHub Desktop sono entrambi multipiattaforma, ma nessuno dei due è open source.
jdgregson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.