2013-03-08 8 views
8

ho questo nei miei file dopo qualche problema con VS2012 git-plugin:GIT i file corrotti (<<<<<<<< testa)

using Microsoft.VisualStudio.TestTools.UnitTesting; 
<<<<<<< HEAD 
using NHibernate; 
======= 
>>>>>>> dd2c3d7dfe81074e7c5a73f8e4ca2584481a74f1 

namespace Controll.Hosting.Tests 
{ 
[TestClass] 
public class TestBase 
{ 
<<<<<<< HEAD 
    protected ISessionFactory SessionFactory; 

    [TestInitialize] 
    public void InitializeTestBase() 
    { 
      SessionFactory = NHibernateHelper.GetSessionFactoryForMockedData(); 
======= 
    [ClassInitialize] 
    public void InitializeTest() 
    { 
     Console.WriteLine("Settings NHibernateHelper.IsInTesting -> True"); 
     NHibernateHelper.IsInTesting = true; 
>>>>>>> dd2c3d7dfe81074e7c5a73f8e4ca2584481a74f1 
     } 
    } 
} 

modo è possibile ripristinare i file?

+6

Questi sono conflitti di unione. I file non sono corrotti. – vedarthk

+0

Vedo, posso forzare git a sovrascrivere tutto con le nuove modifiche? – ErikTJ

+0

Devi decidere e conservare i dati che desideri. GIT indicherà solo i conflitti. Modificare il codice in base alla risposta fornita di seguito e salvare il file. – vedarthk

risposta

19

Quello che avevi non era problemi ma conflitti. Questo accade quando i file vengono modificati da due persone diverse nello stesso posto (entrambi aggiungi/rimuovi/modifica le cose all'interno delle stesse linee).

Si può semplicemente aggiornare i file manualmente, decidendo di tenere tutto tra <<<<<<< HEAD e =======, o tra ======= e >>>>>>>, o qualche combinazione dei due. Dopo aver risolto tutti i conflitti , devi solo eseguire il commit delle modifiche.

annullare le modifiche locali su un file, si può fare

git checkout yourfile 

o, per tutti i file utilizzando

git checkout -- . 

Si può anche decidere, per ogni file, se si desidera mantenere il vostro versione o la versione del repository con

+0

Ok, grazie. Lo accetterò, ma posso scegliere di mantenere tutte le mie modifiche locali (sto tornando a un vecchio repository e molti file sono interessati)? – ErikTJ

+1

@ErikTJ Non si dovrebbe decidere di fare qualcosa su * tutti * i file. La cosa migliore, anche se è un po 'fastidiosa, è guardare ogni file e decidere in base a quale git indica come conflitti. – alestanis

+0

@alestanis Bello dei tuoi pazienti per spiegare questo ABC di git .. – adardesign

5

La tua Q è la risposta migliore da alestanis, già. Ancora per una facile consultazione:

Una spiegazione di quei contrassegni di conflitto >>>>> ... <<<<< può essere trovata a this question.

Ulteriori informazioni sulla fusione sono disponibili su this Q.

E git help merge è abbastanza esplicito utile pure:

come risolvere i conflitti

Dopo aver visto un conflitto, si possono fare due cose:

· non decidere la fusione. Le uniche operazioni di pulizia necessarie sono il ripristino del file di indice su , l'HEAD esegue il commit su reverse 2. e ripulisce le modifiche apportate alla struttura dell'albero da 2. e 3.; git merge --abort può essere utilizzato per questo.

· Risolvi i conflitti. Git segnerà i conflitti in l'albero di lavoro. Modifica i file in forma e git add nell'indice . Utilizzare git commit per sigillare l'affare.

si può lavorare attraverso il conflitto con una serie di strumenti:

· Utilizzare un mergetool. git mergetool per avviare un mergetool grafico che funzionerà attraverso l'unione.

· Guarda le differenze.git diff mostrerà un differenziale a tre vie, evidenziando le modifiche da entrambe le versioni HEAD e MERGE_HEAD.

· Guarda le differenze da ogni ramo. git log --merge -p <path> mostrerà prima le differenze per la versione HEAD e quindi la versione MERGE_HEAD .

· Guarda gli originali. git show :1:filename mostra l'antenato comune, git show :2:filename mostra la versione HEAD e git show :3:filename mostra la versione MERGE_HEAD.

0

Utilizzare SourceTree per git per gestire i miei build con Kdiff installato mi ha aiutato a risolvere il 99% di questi problemi in modo molto efficiente.

Sono appena uscito con il tentativo di rimuovere questi dal mio file SOU in. Net, in genere la sostituzione del file SOU con una versione precedente risolve questo.