2013-01-10 8 views
30

Sto lavorando su un repository git da solo (quindi sì, conosco le implicazioni e gli avvertimenti di ciò) e in qualche modo uno degli alberi ha ricevuto un commit dopo essere stato premuto quando non dovrebbe avere.Risolvi conflitti di unione: forza sovrascrivi tutti i file

Ora sto cercando di tornare indietro e si lamenta di centinaia di conflitti di unione.

C'è un modo per dire git a forzatamente sovrascrivere localmente tutti i file provenienti dal server remoto? C'è un modo più veloce di fare git reset --hard HEAD~1 e poi fare il pull?

Sulla stessa nota, c'è un modo per fare lo stesso con una semplice unione? Tutto ciò che ho visto suggerisce di controllare ogni singolo file durante la fase di risoluzione dei conflitti di fusione, ma con centinaia di file non è possibile farlo manualmente.

+1

perché non devi solo soffiare via la tua sandbox e git clonarlo di nuovo? – gview

+0

Speravo in qualcosa che non ci fosse voluto tanto tempo. Il progetto è ampio e richiederebbe una buona quantità di tempo per la clonazione. – Qix

risposta

53

Ci sono tre semplici soluzioni per copiare l'ultima versione che è in voi repository remoto, scartando tutte le modifiche che sono state apportate a livello locale:

  1. scartare il repository e il clone di nuovo. Questa è la soluzione più semplice, ma se il repository è grande, può richiedere molto tempo, e può richiedere uno sforzo extra, come ri configure ING, ecc

  2. annullare le modifiche locali con git reset --hard <hash> e poi fare un git pull. Il problema è che devi prima trovare un commit che preceda la cronologia delle modifiche che stai cercando di evitare. Dopo aver ripristinato l'hash di commit, fare un git pull.

  3. fare un git fetch per portare gli aggiornamenti per il vostro riferimento locale del ramo a distanza (di solito di origine/master) e poi fare un passaggio git reset --hard questo riferimento, vale a dire, git reset --hard origin/master.

+4

# 3 era abbastanza intelligente. Buona risposta. Benvenuto su StackOverflow, a proposito. Solo una nota: usa le virgolette (') per indicare il codice o la riga di comando. – Qix

+3

'git checkout --theirs .' sembra funzionare se l'unione non include alcuna delezione –

0
git reset --hard {remote_repository_name}/{branch_name} 

Esempio:

git reset --hard upstream/branch1 

Se si lavora con un ramo è possibile utilizzare quanto sopra code.But prima di questo, è necessario impostare (a monte o di origine) al repository locale ,

git remote add upstream https://github.com/lakini/example.git 

qui, https://github.com/lakini/example.git è il repository monte remoto.

Come in questo modo, possiamo anche lavorare nel repository remoto (origine).

git reset --hard origin/branch1 
+0

Questo è praticamente esattamente ciò che l'altra risposta ha detto ... – Qix