2009-08-18 9 views
30

Jak można git-checkout bez nadpisywania danych?do git checkout bez nadpisywania danych

biegnę

git checkout master 

uzyskać

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

Jest to zaskakujące, ponieważ nie wiedziałem, że Git scala kiedy git-checkout. zawsze uruchamiane po komendzie oddzielnie git merge new-feature. To wydaje się być pozornie niepotrzebne jeśli Git łączy w kasie.

Odpowiedz

51

Git jest ostrzeżeniem, że formularze/answers.php ma zmian w kopii roboczej lub indeksu, które nie zostały popełnione.

Można użyć git-stash, aby zapisać zmiany, a następnie git-stash zastosowanie ich przywrócenia.

Powszechnie stosowanym przypadkiem użycia git-stash jest to, że pracujesz nad zmianami, ale musisz tymczasowo sprawdzić inny oddział, aby naprawić błąd. Więc możesz ukryć swoje zmiany w indeksie i kopii roboczej, kasy w drugim oddziale, naprawić błąd, zatwierdzić, dokonać kasacji oryginalnego oddziału, i git-stash zastosować, aby przywrócić zmiany i odbiór w którym zostało poza.

+1

Dziękuję za wzmianka o 'git-stash'! - Nie wiedziałem, że jego cel ma być użyty w takich sytuacjach jak ten. –

+2

Z jakiegokolwiek powodu nie mogłem użyć polecenia git-skash. Zamiast tego musiałem użyć "git stash" (bez myślnika). –

+0

Jeśli chcesz tylko sprawdzić inną wersję, zachowując niezatwierdzone zmiany (co czasami zdarza się przy wyszukiwaniu wersji wprowadzającej błąd), sugestia Jakuba ('git checkout -m') jest znacznie łatwiejsza. –

18

Git wykonuje dwukierunkowe scalanie niepowiadomionych zmian podczas przełączania gałęzi (przy użyciu git checkout <branch>), ale zwykle robi tylko trywialny (drzewa poziom) scalania.

Poza git-stashsolution by Karl Voigtland można podać dodatkowe opcje do git checkout, wybierając jedną z poniższych opcji:

  • Tell git do starać się połączyć uncomitted zmian w branży przełączyć się z -m/--merge opcja. Dzięki tej opcji, trójdrożny scalić między obecnym oddziału, pracujących treści swoich drzew, a nowy oddział jest zrobione, i będzie na nowym oddziale.

  • Poinformuj git, aby nadpisał niepowiadomione zmiany, wyrzucając lokalne zmiany za pomocą opcji -f. Ostrzeżenie: niezamówione zmiany zostaną utracone!

+2

Dzięki za to. Drugi ('git checkout -f master') pomógł mi wrócić. Nie wiem, jakie zmiany utraciłem, ale nie były one ważne, ponieważ jest to bardzo stara kopia repo, którą chciałem sprawdzić. – mgilson

+0

Czy można zrobić „przeciwnego” z 'git checkout -f'? Zasadniczo chciałbym, żeby Git zrezygnował z sprawdzania plików, które mogłyby spowodować konflikt. – giusti