Dotychczasowe odpowiedzi nie są idealne, ponieważ wymagają dużo niepotrzebnej pracy w celu rozwiązania konfliktów scalania lub przyjmują zbyt wiele założeń, które często są fałszywe. Oto jak to zrobić idealnie. Link jest do mojej własnej strony.
Masz niezatwierdzone zmiany my_branch, do których chcesz się zobowiązać master, bez zatwierdzania wszystkich zmian od my_branch.
Przykład
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Wyjaśnienie
Zacznij od połączenia mastersię ze swoim oddziałem, ponieważ i tak będziesz musiał to zrobić ostatecznie, a teraz jest najlepszy czas na rozwiązanie wszelkich konfliktów.
-uOpcja (aka --include-untracked) w git stash -uzapobiega zgubieniu plików nieśledzone kiedy później zrobić git clean -f -dwewnątrz master.
Po git checkout mastertym ważne jest, aby tego NIE robić git stash pop, ponieważ będziesz potrzebować tej skrytki później. Jeśli włączysz utworzoną skrytkę, my_brancha następnie git stashw nią masterwejdziesz, spowodujesz niepotrzebne konflikty scalania, gdy później zastosujesz tę skrytkę my_branch.
git resetodsłania wszystko, co wynika z git stash apply. Na przykład pliki, które zostały zmodyfikowane w skrytce, ale nie istnieją, mastersą przenoszone jako konflikty „usunięte przez nas”.
git checkout .i git clean -f -dodrzucić wszystko, co nie zostało popełnione: wszystkie zmiany w śledzonych plikach oraz wszystkie nieśledzone pliki i katalogi. Są już zapisane w skrytce, a pozostawienie masterich spowoduje niepotrzebne konflikty scalania przy ponownym włączeniu my_branch.
Ostatni git stash popbędzie oparty na oryginale my_branch, a więc nie spowoduje konfliktów scalania. Jeśli jednak twoja skrytka zawiera nieśledzone pliki, które zobowiązałeś się opanować, git będzie narzekać, że „nie można przywrócić nieśledzonych plików ze skrytki”. Aby rozwiązać ten konflikt, należy usunąć te pliki z drzewa pracy, potem git stash pop, git add .i git reset.