2012-02-04 10 views
49

Ilekroć próbuję wcisnąć Git uzyskać to:Git "Nie doszedłeś do skutku" i nic do przekazania?

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

Running git status uzyskać:

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

lub bieganie git ls-files -u mam nic.

Uruchamianie git add . i ponowna próba nie ma znaczenia.

Co słychać?

Odpowiedz

87

OK W końcu znalazłem odpowiedź: git commit -m "Test" najwyraźniej to naprawiłem. Wynikiem było puste zatwierdzenie bez żadnych zmian. Nawet Github pokazuje puste zatwierdzenie, ale działa.

+1

thaaaank youuuuuuuuu! – koenmetsu

+1

Dla mnie to pokazało się jako commit oznaczający punkt połączenia, więc komunikat taki jak "Scalanie dev do master" byłby bardziej odpowiedni niż "Test". –

+1

Wow. Teraz każdy może wyjaśnić, dlaczego to działa, ale 'git commit' nie? – user1205577

46

Czy skończyłeś z pustym zatwierdzeniem scalenia (dwóch rodziców) lub po prostu pustym zatwierdzeniem? W tym ostatnim przypadku mogłeś usunąć .git/MERGE_HEAD.

Aktualizacja: Zamiast usuwać MERGE_HEAD ręcznie, można również użyć git merge --abort (as of git 1.7.4) lub git reset --merge (as of git 1.6.2). Warto również wspomnieć, że co najmniej od wersji 1.8.3 (może wcześniej?) Powinieneś zobaczyć taką wiadomość, jeśli faktyczne scalanie jest w toku i musi zostać zatwierdzone (jeśli podałeś --no-commit, na przykład):

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

Jeśli nie widzisz tego i nadal uzyskać MERGE_HEAD ostrzeżenie, coś jest pomieszane i należy prawdopodobnie tylko --abort wrócić do pierwotnego stanu.

dodatkowe Szczegół Komentarze

Podczas scalania git tworzy plik MERGE_HEAD w korzeniu .git folderu (obok głowy, ORIG_HEAD, prawdopodobnie FETCH_HEAD, etc) do śledzenia informacji o scaleniu w postęp (w szczególności SHA (s) commit (ów) włączonych do bieżącego HEAD). Jeśli to usuniesz, Git nie będzie już myślał, że trwa scalanie. Oczywiście, jeśli rzeczywiście trwa scalanie, nie będziesz chciał usunąć tego pliku.

+2

To rozwiązanie wydaje mi się bardziej wygodne niż wykonywanie pustych fuzji, ponieważ dzieje się tak często z git. –

+0

Dzięki za to. Szkoda, że ​​naprawdę to zrozumiałem. Kiedy mam czas, domyślam się, że przeczytam dokumentację. – Taylor

+3

Podczas scalania git tworzy plik 'MERGE_HEAD' w katalogu głównym folderu' .git' (obok 'HEAD',' ORIG_HEAD', prawdopodobnie 'FETCH_HEAD', etc), aby śledzić informacje o trwającym scalaniu (szczególnie , SHA (s) commit (ów) są połączone w bieżącym 'HEAD'). Jeśli to usuniesz, Git nie będzie już myślał, że trwa scalanie. Oczywiście, jeśli "scalanie" naprawdę jest w toku, nie chciałbyś usunąć tego pliku. – dahlbyk

7

Mój ratownik życia był git reset polecenia.

Powiązane problemy