2012-07-14 14 views
14

Quando ho accidentalmente eseguito il commit di un file nel ramo errato, di solito utilizzo git reset --hard HEAD~1. Tuttavia, usando questo metodo generalmente perdo tutti i file impegnati. C'è un modo per resettare un commit, senza perdere i file modificati?Ripristina senza perdere i file già impegnati

risposta

25

non utilizzare --hard utilizzare --soft invece.

Pertanto, se si desidera rimuovere il vostro ultimo commettere faresti:

git reset --soft HEAD^

+0

@cherrun, considera anche la lettura [Ripristina Demistificato] (http://git-scm.com/2011/07/11/reset.html). – kostix

+0

+1 per una risposta breve e accurata. Per riassumere, utilizzare: 'git reset --soft HEAD ~ 1' – VarunPandey

5

mentre Alex è molto corretto, potrei essere tentato di provare una sequenza diversa:

Se volevo il commit su un ramo ancora-a-essere-nato:

git branch newbranch 
git reset --hard HEAD^ 

Se avessi voluto il commit su un ramo esistente:

git checkout otherbranch 
git cherry-pick firstbranch 
git checkout firstbranch 
git reset --hard HEAD^ 

L'esempio completo della risposta di Alex

git reset --soft HEAD^ 
git checkout otherbranch 
git commit -am "Message" 

Nota l'ultimo esempio fallirà male se il tentativo di "galleggiare" il cambiamento per l'altro ramo non riesce a causa di conflitti. Dovrai quindi chiudere/chiudere/applicare per entrare nella risoluzione dei conflitti.

+1

ottima risposta! Penso che questo sia solo il lancio di alcuni cambiamenti che sono stati fatti nell'ultimo commit e mantenendo l'altra metà. In tal caso, devi semplicemente buttare via il commit e aggiungere nuovamente le modifiche che intendi mantenere. in questo caso anche 'git add --interactive' potrebbe essere utile! – Alex

Problemi correlati