2012-02-03 6 views
6

Sto riscontrando un problema nel tentativo di ripristinare un file con un commit precedente, so che posso usare git checkout per ripristinare un singolo file ma il problema è che ho delle modifiche in quel file che vorrei conservare così mi stavo chiedendo come fare una sorta di "unione" tra un commit precedente e l'HEAD corrente per un singolo file? Ho provato a utilizzare git reset sha-of-my-commit path/to/my/file ma mette la versione precedente nell'area di staging mantenendo l'ultima versione sulla mia directory di lavoro non so come unire entrambi i file dopo di essa.Come ripristinare un file in una versione precedente senza sovrascrivere le modifiche correnti?

Quello che ho fatto per ora era solo git diff ..sha-of-my-commit path/to/my/file e basta copiare/incollare le linee mancanti ma credo che ci sia un modo migliore per farlo bene?

risposta

4

Supponendo che vuoi dire i cambiamenti sono nel vostro albero di lavoro (non impegnati):

git stash 
git checkout previous-commit path/to/file 
git stash pop 

Se tu avessi commesso alcuni cambiamenti, allora si può ancora fare, con un po 'più di lavoro. Supponiamo che la cronologia sia la seguente:

- x - A - x - x - x - B - x - x (HEAD) 

dove si desidera la versione in A, più le modifiche da B in poi. Poi fare questo:

git stash 
git checkout B path/to/file 
git stash 
git checkout A path/to/file 
git stash pop 
git stash pop 

Nota che qualsiasi applicazione scorta, dal momento che è un'operazione Mergey, potrebbe causare conflitti di unione; Ovviamente dovresti risolvere quelli prima di andare avanti!

+0

Grazie! Mi sono completamente dimenticato di 'git stash' – javiervd