2009-08-18 12 views
30

Come è possibile eseguire il git-checkout senza sovrascrivere i dati?Per eseguire il checkout senza sovrascrivere i dati

corro

git checkout master 

ottengo

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

Ciò è sorprendente, dato che non sapevo che Git si fonde quando git-checkout. Ho sempre eseguito dopo il comando separatamente git merge new-feature. Questo sembra non essere necessario se Git si fonde alla cassa.

risposta

51

Git ti avverte che form/answers.php ha delle modifiche nella tua copia di lavoro o nell'indice che non sono state confermate.

È possibile utilizzare git-stash per salvare le modifiche allora git-scorta applicano per ripristinarli.

Il caso di uso comune di git-stash è che si sta lavorando sulle modifiche, ma poi si deve eseguire temporaneamente il checkout di un ramo diverso per correggere un bug. Quindi puoi stash le tue modifiche nel tuo indice e copia di lavoro, checkout l'altro ramo, fare la correzione di bug, commit, checkout il ramo originale, e git-stash applicare per ripristinare le modifiche e pick-up dove hai lasciato off.

+1

Grazie per aver menzionato 'git-stash'! - Non sapevo che il suo scopo fosse usato in situazioni come questa. –

+2

Per qualsiasi motivo, non ho potuto usare il comando git-stash. Invece, ho dovuto usare "git stash" (nessun trattino). –

+0

Se tutto ciò che si desidera è ispezionare una revisione diversa mantenendo le modifiche non vincolate (che a volte è il caso quando si cerca la revisione che introduce un bug), il suggerimento di Jakub ('git checkout -m') è molto più semplice. –

18

Git fa un'unione a 2 vie di modifiche non accettate quando si cambia ramo (utilizzando git checkout <branch>), ma in genere si esegue solo un'unione banale (a livello di albero).

Oltre git-stashsolution by Karl Voigtland, si può dare opzioni aggiuntive per git checkout, scegliendo una delle seguenti opzioni:

  • di Tell git per impegnarsi di più per unire cambiamenti uncomitted in ramo si passa a con -m/--merge opzione. Con questa opzione, viene effettuata un'unione a tre vie tra il ramo corrente, il contenuto dell'albero di lavoro e il nuovo ramo, e tu sarai sul nuovo ramo.

  • di Tell git per sovrascrivere modifiche uncomitted, buttando via i cambiamenti locali con -f opzione. Attenzione: le modifiche non eseguite andranno perse!

+2

Grazie per questo. Il secondo ('git checkout -f master') mi ha aiutato a tornare indietro. Non so quali cambiamenti ho perso, ma non erano importanti in quanto si tratta di una copia molto vecchia di un repository che volevo solo ispezionare. – mgilson

+0

È possibile fare il "contrario" di 'git checkout -f'? Fondamentalmente mi piacerebbe che Git rinunciasse a controllare i file che causerebbero conflitti. – giusti

Problemi correlati