To pytanie jest podobne do tego , ale bardziej szczegółowe.
Mam projekt z dwoma gałęziami ( staging
i beta
).
Rozwijam się dalej staging
i używam master
gałęzi do naprawiania błędów. Więc jeśli pracuję nad stagingiem i widzę błąd, zmieniam na master
gałąź:
git checkout master
i zrób to:
git add fileToAdd
git commit -m "bug fixed"
a potem łączę się z obiema gałęziami:
git checkout staging
git merge master
git checkout beta
git merge beta
I nie ma znaczenia, czy w drzewie roboczym są inne pliki.
Ale teraz, gdy próbuję przejść na master
gałąź , pojawia się błąd :
error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting
Pomyślałem, że powinienem usunąć plik z obszaru przemieszczania:
git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php
ale otrzymuję ten sam błąd. Jeśli git status
dostanęNo changes to commit
git
git-checkout
Manolo
źródło
źródło
reset --hard
? Jeśli naprawdę chcesz odrzucić zmiany. Lub użyj skrytki, jeśli tego nie zrobisz.git add your-file
zaangażować.staging
teraz wprowadzać żadnych zmian .Odpowiedzi:
Twój błąd pojawia się, gdy zmodyfikowałeś plik, a gałąź, do której się przełączasz, również zawiera zmiany dla tego pliku (z ostatniego punktu scalania).
Twoje opcje, jak ja to widzę, to - commit, a następnie uzupełnij ten commit o dodatkowe zmiany (możesz modyfikować zatwierdzenia w git, o ile nie są edytowane
push
); lub - użyj skrytki:git stash save
utworzy magazyn zawierający twoje zmiany, ale nie jest powiązany z żadnym zatwierdzeniem ani nawet gałęzią.git stash pop
zastosuje najnowszy wpis do twojego aktualnego oddziału, przywracając zapisane zmiany i usuwając go ze skrytki.źródło
add
kiedy jest faktyczniesave
.. zaktualizowany. Masz na myśli inne pliki?git stash save
bez parametru nazwy pliku zapisze wszystkie zmodyfikowane pliki, jeśli chcesz (i przywróci je do stanu ostatnio zatwierdzonego). Posiadanie dodatkowej kopii drzewa katalogów nigdy nie boli, ale zawsze mam paranoję.master
gałęzi. Opcją byłybypop
też zmiany w innej branży?master
, ale w ten sposób utraci swoją aktualną zawartość, a ponieważ ta zawartość nie zostanie zatwierdzona , nie będzie można później wrócić do tego stanu, stąd błąd, więc nie byłby zdenerwowany utraconymi zmianami później.Napotkałem ten sam problem i rozwiązałem go przez
a jego specyfikacja jest dość jasna.
źródło
Możesz wymusić wyewidencjonowanie swojego oddziału, jeśli nie chcesz zatwierdzać lokalnych zmian.
źródło
sudo
jest to konieczne, spowoduje tylko złamanie uprawnień do pliku. To ta sama komenda git, którą opublikował rok wcześniej @kiki_yu , ale jest jeszcze gorzej.Cóż, uważaj na
-f
przełącznik. Jeśli użyjesz-f
przełącznika, utracisz wszystkie niezatwierdzone zmiany . Chociaż mogą istnieć przypadki użycia, w których warto użyć-f
, w większości przypadków możesz chciećstash
wprowadzić zmiany, a następnieswitch
rozgałęzić.stashing
Procedurę przedstawiono powyżej.źródło
Możesz zatwierdzić w bieżącej gałęzi, wyewidencjonować do innej gałęzi, a na koniec wybrać najlepsze zatwierdzenie (zamiast scalania).
źródło
Jeśli otrzymasz ten komunikat podczas próby wyewidencjonowania innej gałęzi:
Oznacza to, że masz pewne zmiany, które musisz zatwierdzić w gałęzi, którą wyewidencjonowałeś - lub musisz je wyczyścić lub schować, jak większość powyższych punktów. W 19 na 20 razy bardziej prawdopodobne jest, że po prostu wprowadzę zmiany.
Teraz, gdy to zrobiłeś, możesz sprawdzić drugą gałąź i dość łatwo przełączać się tam iz powrotem.
Po prostu upewnij się, że oboje znajdujesz się na właściwej gałęzi i pchasz do prawej gałęzi, gdy uruchamiasz polecenie git push origin $ {branch}. Uwaga: jeśli masz swój projekt bezpośrednio podpięty do Intellij, możesz zobaczyć, że zmieniłeś gałąź w prawym dolnym rogu głównego okna.
źródło