2009-09-25 24 views
8

Czasami znajduję się w gałęzi z funkcjami, ale wprowadziłem niezwiązane zmiany, które chcę zobaczyć u mistrza. Często można po prostu zrobić:Przełączanie gałęzi w git

git checkout master 
git commit -m "..." filename 

Ale czasami, kiedy mam kasę dostaję ostrzeżenie, że istnieją lokalne zmiany i dlatego nie mogę przełączyć oddział.

Dlaczego tak się dzieje tylko czasami? Czy istnieje obejście tego problemu, gdy widzę tę wiadomość? Może zapas?

Odpowiedz

15

Jak wspomniał Devin Ceartas, dzieje się tak, gdy zmiana gałęzi spowoduje zmianę pliku, który już został zmieniony lokalnie. (Git nie będzie narzekać, gdy masz lokalnych zmian w pliku, który nie powinien być zmieniany lub dodać nowe pliki, które istnieją na ani oddziału ani pana.)

dwa sposoby obejścia tego:

  1. "git ukryj" swoje zmiany, zmień na master i zastosuj "git stash". Następnie zatwierdz zmianę.

  2. Zatwierdź zmiany w gałęzi, następnie "git ukryj" wszelkie inne zmiany (jeśli są jakieś), zmień na master, a cherry-wybierz zmianę na master.

+5

Cztery sposoby: 3. zawsze możesz spróbować zrobić 3-way merge z "git checkout -m" i 4. możesz wymusić kasę (tracąc swoje zmiany) za pomocą "git checkout -f". –

0

Widziałem to również. Myślę, że chodzi o to, kiedy zmiany lokalne ulegną zmianie z czymś w innym oddziale (w przeciwieństwie do nowego pliku nie znajdującego się w innym oddziale). Zawsze możesz sprawdzić drugą gałąź w innym katalogu.

+0

Jak można sprawdzić inną gałąź w innym katalogu? –

+0

Poszukaj pomocy na git-new-workdir, która pozwala ci stworzyć nowy katalog roboczy wspierany przez to samo repozytorium. – Phil

+0

Widzę, jest to skrypt w contrib/workdir w repozytorium git git. Dzięki! –

Powiązane problemy