2012-04-19 7 views
5

Ho scritto un commit in un file da gitk facendo clic con il pulsante destro del mouse sul commit e selezionando "Scrivi commit su file".Come faccio il contrario di "Write commit to file" di gitk?

Come si applica il commit da questo file? Posso fare git apply, git add e git commit combo, ma non c'è un comando in una sola volta per prendere solo l'output (con il messaggio di commit e meta-dati) e commetterlo così com'è?

+1

Questo è molto poco indicato - utilizzare la stessa terminologia di git. Non capisco cosa intendi con 'scritto un commit su un file' e io mantengo git-gui. Hai commesso delle modifiche in un file e poi hai generato una patch in qualche modo? I dettagli contano se ti aspetti di ricevere assistenza utile. Come è stata generata la patch - * esattamente *. Come hai notato, git apply e git am accettano file in formato diverso - ci si aspetta patch, le altre email con patch inline e commit. Sospetto che la risposta qui sotto sia effettivamente corretta. – patthoyts

+2

@patthoyts In quale altro modo descrivo facendo clic sul pulsante "Scrivi impegno su file"? –

+0

Sembra che ci sia un'opzione "write commit to file" in 'gitk', che fa apparire una finestra di dialogo che esegue il comando' git diff-tree --stdin -p --pretty'. 'git am' a quanto pare non capisce questo formato. 'git apply' è solo per applicare diffs, cioè non creerà l'oggetto commit. –

risposta

2

Sto usando Linux, ma penso di vedere di cosa stai parlando. In gitk c'è un'opzione "Scrivi commit su file" quando si fa clic con il pulsante destro del mouse su un commit, che apre una finestra di dialogo che esegue il comando git diff-tree --stdin -p --pretty per impostazione predefinita.

git apply è solo per applicare diffs, cioè non creerà l'oggetto commit in modo che non debba essere utilizzato. git am dovrebbe essere lo strumento corretto per eseguire questa operazione, poiché crea oggetti commit. Tuttavia, non capisce il formato in uscita dal comando precedente e crea l'errore che stai vedendo.

L'opzione più semplice è probabilmente quella di creare la patch utilizzando un formato git am comprensibile utilizzando git format-patch anziché git diff-tree. Potrebbe esserci un modo per forzare git am a comprendere il formato git diff-tree, ma io non eseguo patch in modo tale che non ne sono consapevole.

0

git am potrebbe fare quello che stai cercando. Prende le patch come generate da git format-patch come input. Non so cosa stia sputando git-gui.

+0

"Rilevamento del formato patch non riuscito." Un po 'strano dal momento che ho appena generato il file con lo stesso git sulla stessa macchina sullo stesso repository. –

+0

Come dovrebbe funzionare? La pagina di manuale parla di una casella di posta come parametro, che sembrerebbe indicare che questo non è il comando corretto. –

+1

Dopo aver eseguito alcuni scavi, il comando si aspetta effettivamente un formato della casella di posta, non una patch. –

2

Nessuno sembra aver fornito una risposta reale alla domanda, ecco cosa ho trovato da https://github.com/sinsunsan/archiref_wiki/wiki/Git-howto

patch -p1 < patch-file 

Questo prende il file di patch prodotta da 'Scrivi impegnarsi a presentare', dice che ignorare il primo livello di percorso (-p1) cioè un /, b/nel file e si applica ai file correnti sul disco. Il risultato è quindi nella struttura di lavoro e può essere eseguito come nuovo commit:

git commit -am'Commit message here please.'