2012-02-04 9 views
49

Ogni volta che provo a spingere in Git ottengo questo:Git "Non hai concluso la tua unione" e nulla da commettere?

You have not concluded your merge (MERGE_HEAD exists). 
Please, commit your changes before you can merge. 

Esecuzione git status ottengo:

# On branch master 
nothing to commit (working directory clean) 

o in esecuzione git ls-files -u non ottengo niente.

In esecuzione git add . e riprovare non fa alcuna differenza.

Che succede?

risposta

87

Okay ho finalmente trovato la risposta: git commit -m "Test" apparentemente risolto. Il risultato è stato un commit vuoto senza modifiche di sorta. Anche Github mostra un commit vuoto, ma funziona.

+1

thaaaaank youuuuuuuuuu! – koenmetsu

+1

Per me questo è apparso come il commit che segna il punto di unione, quindi un messaggio del tipo "Unire dev in master" sarebbe più appropriato di "Test". –

+1

Wow. Ora qualcuno può spiegare perché questo funziona, ma 'git commit' no? – user1205577

46

Ti sei ritrovato con un commit unione libero (due genitori) o solo un commit vuoto? In quest'ultimo caso, potresti aver cancellato .git/MERGE_HEAD.

Aggiornamento: Piuttosto che eliminare MERGE_HEAD a mano, si potrebbe anche usare git merge --abort (as of git 1.7.4) o git reset --merge (as of git 1.6.2).

E 'anche opportuno ricordare che, almeno a partire dal Git 1.8.3 (forse prima?) Si dovrebbe vedere un messaggio status come questo se una fusione reale è in corso e deve essere commesso (se è stato specificato --no-commit, per esempio):

# On branch master 
# All conflicts fixed but you are still merging. 
# (use "git commit" to conclude merge) 
# 
nothing to commit, working directory clean 

Se non vedi questo e ancora ottenere il MERGE_HEAD avvertimento, qualcosa è incasinato e si dovrebbe probabilmente solo --abort per tornare a uno stato pulito.

Ulteriori Dettaglio da Commenti

Durante una stampa, git crea un file MERGE_HEAD nella radice della cartella .git (vicino alla testa, ORIG_HEAD, probabilmente FETCH_HEAD, ecc) per tenere traccia delle informazioni circa l'unione in progresso (in particolare, gli SHA (s) del commit (s) vengono uniti nel corrente HEAD). Se lo elimini, Git non penserà più che sia in corso una fusione. Ovviamente, se una fusione è realmente in corso, non si vorrebbe cancellare questo file.

+2

Questa soluzione mi sembra più conveniente che commettere vuote fusioni poiché questo accade spesso con git. –

+0

Grazie per questo. Vorrei averlo capito davvero. Quando avrò tempo, immagino che esaminerò i documenti. – Taylor

+3

Durante l'unione, git crea un file 'MERGE_HEAD' nella radice della cartella' .git' (accanto a 'HEAD',' ORIG_HEAD', probabilmente 'FETCH_HEAD', ecc.) Per tracciare le informazioni sull'unione in corso (in particolare , gli SHA (s) del commit (s) vengono uniti nel corrente 'HEAD'). Se lo elimini, Git non penserà più che sia in corso una fusione. Ovviamente, se un 'unione' è veramente _is_ in corso, non si vorrebbe cancellare questo file. – dahlbyk

7

Il mio salvavita era il comando git reset.

Problemi correlati