2010-01-31 6 views
8

Se ho un gruppo di modifiche senza commit a un singolo file nella mia directory di lavoro in Git, quale è il modo più semplice per selezionare e scegliere in modo selettivo tra queste modifiche?Qual è il modo più semplice in Git di "selezionare con cura" le modifiche non vincolanti in un singolo file?

Il mio modo attuale è di "diffondere" il file, quindi rivedere manualmente la diff accanto al file attuale. Se voglio ripristinare bit di vecchio codice, posso copiare e incollare dal diff al file.

In alcuni casi sarebbe molto più semplice se fosse possibile visualizzare e modificare le modifiche in un singolo file. Ad esempio, esiste un comando Git che è possibile utilizzare per convertire il file di lavoro con le modifiche in un formato simile alla risoluzione dei conflitti, ad esempio con i simboli " < <" attorno alle modifiche non attivate? In questo modo si potevano scegliere e cambiare le modifiche senza dover tagliare e incollare da un file all'altro.

Non sono sicuro di come ottenere ciò poiché non si tratta di una situazione a tre vie (unione). Piuttosto, è una situazione a doppio senso, con un set di modifiche a un file (quindi non ci sono conflitti). Grazie.

+0

È possibile selezionare Hunk selettivamente con "add", "stage" (lo stesso add), "cassa", "reset", e "scorta". Ognuno prende un'opzione -p. (Dal 1.6.6) –

+0

Grazie, William. Sì, usando -p con git-checkout risultava più conveniente per me nella mia situazione particolare rispetto all'uso con git-add. – cjerdonek

risposta

11

È possibile selezionare quale hunk da aggiungere in un commit tramite git add --patch. Questo ti chiederà ogni pezzo nelle modifiche di un file se vuoi aggiungere quel changeset. Se un particolare pezzo è troppo grande per te, puoi dividerlo ulteriormente. C'è un'altra opzione a git-add, --interactive, che ti consente di lavorare con più file.

Per ulteriori informazioni, vedere git-add man page o this post da una ricerca su google.

+0

Grazie, Alok e tutti. Ho provato questo, ed è sicuramente più facile di quello che stavo facendo prima. Tuttavia, sembra ancora meno conveniente rispetto al processo di risoluzione dei conflitti. Sembra che l'aggiunta di questo metodo debba essere almeno altrettanto semplice della fusione. Mi chiedo ancora se c'è un modo per "ingannare" Git nella creazione di una situazione di conflitto in cui le linee "<<<<" possono essere usate al posto del formato diff: +/- /. – cjerdonek

+0

Sono d'accordo. Se esistesse un modo per utilizzare uno qualsiasi dei tanti strumenti di unione esistenti per selezionare gli hunks per lo stage, sarebbe un notevole miglioramento rispetto all'interfaccia della riga di comando corrente in cui si continua a dover rispondere ai prompt del testo. – davr

1

Oltre a git add --patch c'è git add -i: a cui si potrebbe pensare come un livello su git add --patch.

Esercitazioni su git add --patch e git add -i

+0

Voto superiore per i collegamenti del tutorial. Grazie! –

Problemi correlati