2011-05-13 11 views
21

Tytuł oryginalny: git - zaktualizować wszystkie pliki, które nie zostały zmienionegit - Błędy po scalić konflikty podczas stash pop

Obecnie próbuję zaktualizować wszystkie pliki w repozytorium git, które nie zostały zmienione. Powiedzmy na przykład mam:

  • test1.py
  • test2.py

test1.py został zmodyfikowany lokalnie natomiast oba pliki zostały zmodyfikowane zdalnie. Teraz próbowałem:

git stash 
git pull 
git stash pop 

który przywrócił moje zmiany, dając mi ostrzeżenie, że muszę połączyć test1.py. Jak na razie dobrze. Problem pojawia się, gdy próbuję ponownie wykonać ten sam proces (po ponownym zmianie obu plików). Git teraz mówi:

unmerged (6b126638f7c63aa648609afa60ab972a2403502b) 
fatal: git-write-tree: error building trees 
Cannot save the current index state 

co mnie trochę zasmuca. Chodzi o prostą rzecz: zaktualizuj wszystkie pliki, które nie zostały zmienione. Zajmę się później scalaniem.

+0

Jeszcze jedna uwaga: z Git, tak naprawdę nie rozpadasz się.Kiedy będziesz ciągnąć, otrzymujesz * wszystkie * zmiany, niezależnie od tego, czy zmieniłeś te pliki, czy nie. Po zastosowaniu (pop) zmian ukrytych, kończy się kombinacja zmian (poprzez scalanie, za kulisami). Twój cel aktualizacji tylko plików, które nie zostały zmienione, nie ma większego sensu. – Cascabel

Odpowiedz

27

Rozwiązałeś konflikt w swoim pliku (może, patrz przypis), ale Git nie wie, czy skończyłeś, czy nie. Musisz wskazać git, że skończyłeś rozwiązywać ten konflikt. (W przeciwnym razie, jeśli pozwolisz ci odejść i właściwie go nie rozwiązałeś, możesz znaleźć różne sposoby, aby strzelić sobie w stopę.)

O ile mi wiadomo, sposobem na zrobienie tego jest:

git add <file>  # stage the resolved version, which marks it as resolved 
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree 

wydaje się, że nie powinno być sposobem na oba naraz z update-index ale to nie jest dla mnie oczywiste, z szybkim spojrzeniem. (Ale potem znowu, dla rzeczywistych konfliktów scalania, ty nigdy chcą zaznaczyć konflikt jako rozwiązany bez inscenizacji treści, to po prostu dla stashes, że powstaje.)

I jak VonC mówi w swej odpowiedzi, powinno to się zdarzyć ponownie, można łatwo zobaczyć, co rzeczy miały konfliktów scalania podczas stosowania skrytki przy użyciu git status. Zostaną wyświetlone na czerwono (jeśli masz kolor) i powiedz unmerged (lub może deleted by us/them, jeśli był to konflikt usuwania/modyfikacji).

Przypis: Patrząc wstecz na twoje pytanie, nie mogę powiedzieć, czy naprawiłeś konflikty, czy nie - po prostu powiedziałeś "jak dotąd tak dobrze". "Ostrzeżenie", które widzieliście, jest naprawdę sugestią do natychmiastowego rozwiązania konfliktów. Konflikty powstały podczas próby połączenia zmian, które wyciągnąłeś ze zmianami, które ukryłeś. Musisz rozwiązać ten konflikt i doprowadzić drzewo robocze do stanu zgodnego, zanim będziesz mógł przejść w dowolny sposób. Rozpraw się z nim tak samo, jak z konfliktem scalającym - zajrzyj do pliku, znajdź znaczniki konfliktu, dowiedz się, jakie treści zachować! (A następnie spójrz wyżej powyżej, aby dowiedzieć się, jak dokończyć.)

+0

Nie widzę Twojej odpowiedzi od razu. +1 dla jasnej procedury do naśladowania. – VonC

+0

Próbowałem to zrobić. Po poleconych poleceniach ponownie spróbowałem 'git stash pop', ale nadal nie działa. Teraz mówi "błąd: Twoje lokalne zmiany w następujących plikach zostaną nadpisane przez scalenie: " –

+0

Miałem ten sam problem co @Dave Cohen. Udało mi się go rozwiązać za pomocą 'git checkout -f ', który (ostrzeżenie!) Rzuca wszelkie lokalne zmiany. – James

2

To powinno oznaczać, że twoja druga skrytka nie działa z powodu wciąż nierozwiązanego scalenia.
Zobacz ten SO question, który ilustruje ten sam komunikat o błędzie na skrytce.

To drzewo thread confirms oznacza, że ​​drzewo nie może zawierać niezamkniętych plików.

You have a tree with unmerged entries.
Why don't you look into the issue and solve it?
A simple " git status " should show you what are the unmerged entries. A simple look at those files should show you conflict markers.

Resolve the issue, commit, continue.

Powiązane problemy