2011-12-27 16 views
6

So che posso usare git commit --amend --file=path-to-my-new-message ma questo modificherà anche le modifiche in scena. Certo, potrei mettere in serbo e successivamente applicare & rilasciare la scorta, ma c'è una soluzione più rapida per cambiare il messaggio di commit HEAD senza commettendo le modifiche graduali (e l'interazione dell'utente)?Git: cambia il messaggio di commit HEAD senza toccare l'indice

+0

Questa è una buona domanda, e scommetto che c'è un modo per farlo, ma dal momento che è una tale operazione I frequenti Suppongo che non ricorderò mai i parametri della riga di comando per farlo. Stash/amend/pop è probabilmente molto più pratico. –

risposta

2

Secondo la pagina man git commit --amend --only senza percorsi specificati dovrebbe fare il lavoro, ma questo non funziona per me. Come un work-around si può temporaneamente aggiungere un file e rimuoverlo di nuovo, che modifica due volte:

touch tmp 
git add tmp 
git commit --amend -m "new message" tmp 
git rm tmp 
git commit --amend -m "new message" tmp 
+0

Cool, questa sembra essere la soluzione migliore finora. – Mot

0

È possibile git rebase -i HEAD^ e quindi modificare pick in reword nell'editor aperto da git-rebase. Dopo questo ti verrà richiesto un nuovo messaggio di commit.

+3

Ma questo toccherà sia l'indice che l'albero di lavoro. –

+0

Il rebase interattivo non è un'opzione per me, perché il comando deve essere eseguito senza l'interazione dell'utente. – Mot

7

È possibile scrivere un nuovo messaggio di commit in un file (ad esempio msg.txt) e utilizzare git commit-tree, ad es.

new_head=$(git commit-tree HEAD^{tree} -p HEAD^ <msg.txt) 

git reset --soft $new_head 

Ciò presuppone che il commit si modificano ha un genitore, se non è necessario fornire ulteriori -p HEAD^2 -p HEAD^3 ....

È un po 'brutto e di basso livello. Potresti trovare più semplice memorizzare le tue modifiche e utilizzare un "emendamento" lineare.

git stash 
git commit --amend 
git stash pop --index 

Come suggerisce @Jefromi, si potrebbe anche utilizzare un file indice temporaneo per la modifica il funzionamento, ad esempio,

GIT_INDEX_FILE=.git/tmpidx git reset 
GIT_INDEX_FILE=.git/tmpidx git commit --amend 
rm .git/tmpidx 
+0

Puoi scommetterci anche con GIT_INDEX_FILE, scommetto! Ma questo mi sembra più pulito. – Cascabel

+0

Invece di HEAD ^, HEAD^2, ... posso utilizzare gli ID SHA dei commit principali del commit HEAD esistente? – Mot

+0

@ Mike L .: Beh, sì, ma perché dovresti? 'HEAD^n' sta per essere più breve da digitare e non dovrai cercare. –

Problemi correlati