Pozostałe odpowiedzi sugerujące sprawdzenie drugiego oddziału, a następnie zatwierdzenie go, działają tylko wtedy, gdy zamówienie jest możliwe z uwagi na lokalne modyfikacje. Jeśli nie jesteś w najczęstszym przypadku użycia do git stash
:
git stash
git checkout other-branch
git stash pop
Pierwszy stash
ukrywa dala zmiany (co w zasadzie tymczasowej popełnić), a kolejne stash pop
ponownie stosuje je. Dzięki temu git może używać swoich funkcji scalania.
Jeśli spróbujesz otworzyć skrytkę, masz do czynienia z konfliktami scalającymi ... kolejne kroki zależą od tego, jakie są konflikty. Jeśli wszystkie ukryte zmiany rzeczywiście należą do tej innej gałęzi, będziesz musiał po prostu je przejrzeć - to konsekwencja dokonania zmian w niewłaściwym oddziale.
Z drugiej strony, jeśli naprawdę masz pomieszane, a twoje drzewo robocze zawiera mieszankę zmian dla dwóch oddziałów, a konflikty są tylko tymi, które chcesz cofnąć w oryginalnej gałęzi, możesz może zaoszczędzić trochę pracy. Jak zwykle jest na to wiele sposobów. Oto jeden, począwszy od po pop i zobaczyć konfliktów:
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
Ewentualnie, jeśli uświadomić sobie, wyprzedzając czas, że to się wydarzy po prostu popełnić rzeczy, które należą na bieżącej gałęzi. Zawsze można wrócić i zmiany, które zobowiązują się:
git add -p
git commit
git stash
git checkout other-branch
git stash pop
i oczywiście należy pamiętać, że to wszystko trwało trochę pracy i uniknąć następnym razem, być może poprzez umieszczenie swoją obecną nazwę oddziału w swoim wierszu dodając $(__git_ps1)
do twojego PS1 w twoim bashrc. (Patrz na przykład: Git in Bash docs.)
Kiedy powiedziałeś: 'Sprawdzanie oddziału, a następnie zatwierdzanie będzie działało tylko wtedy, gdy zamówienie jest możliwe z uwagi na lokalne modyfikacje. Co masz na myśli? Czy mógłbyś podać/omówić jeden prosty przykład, kiedy to się nie powiedzie? –
@ user815423426 Jeśli masz niezatwierdzone zmiany, możesz wyewidencjonować inną gałąź wtedy i tylko wtedy, gdy zestaw plików, które zmieniłeś, a zestaw plików, które różnią się między dwiema gałęziami, jest rozłączny. Oznacza to, że jeśli zmodyfikowałeś plik A, możesz wyewidencjonować inny oddział tylko wtedy, gdy plik A jest taki sam w obu gałęziach. – Cascabel
Dzięki! Kiedy powiedziałeś, że 'A' jest takie samo w obu gałęziach, masz na myśli' A' przed moimi zmianami (to znaczy 'A' w HEAD każdej gałęzi). Poprawny? –