Zacząłem prace nad nową funkcją i po krótkim kodowaniu zdecydowałem, że ta funkcja powinna mieć swoją gałąź.
Jak przenieść istniejące niezatwierdzone zmiany do nowej gałęzi i zresetować obecną?
Chcę zresetować moją obecną gałąź, zachowując dotychczasową pracę nad nową funkcją.
git
git-branch
git-stash
git-reset
Dane O'Connor
źródło
źródło
Odpowiedzi:
Użyj następujących opcji:
Spowoduje to pozostawienie obecnego oddziału w obecnej postaci, utworzenie i pobranie nowego oddziału oraz zachowanie wszystkich zmian. Następnie możesz wprowadzać zmiany w plikach, aby zatwierdzić:
i zobowiązaj się do nowego oddziału za pomocą:
Zmiany w katalogu roboczym i zmiany wprowadzone w indeksie nie należą jeszcze do żadnej gałęzi . To zmienia gałąź, w której kończyłyby się te modyfikacje.
Nie resetujesz oryginalnej gałęzi, pozostanie ona taka, jaka jest. Ostatnie zatwierdzenie
<old-branch>
pozostanie takie samo. Dlatego ty,checkout -b
a następnie dokonaj.Aktualizacja 2020 / Git 2.23
Git 2.23 dodaje nową
switch
podkomendę, próbując usunąć pewne zamieszanie wynikające z przeciążenia użyciacheckout
(przełączanie gałęzi, przywracanie plików, odłączanie HEAD itp.)Począwszy od tej wersji Git, zamień powyższe polecenie na:
Zachowanie jest identyczne i pozostaje niezmienione.
źródło
git checkout -b <new branch>
zmiany, w których zmiany te miałyby się zakończyć.git checkout .
/git reset --hard
będzie nieodwracalny usunąć jeAlternatywnie:
Zapisz bieżące zmiany w skrytce tymczasowej:
$ git stash
Utwórz nową gałąź w oparciu o tę skrytkę i przejdź do nowej gałęzi:
$ git stash branch <new-branch> stash@{0}
Wskazówka: użyj klawisza Tab, aby zmniejszyć wpisywanie nazwy skrytki.
źródło
git stash apply
.git checkout -b <new branch name>
git add -A
przed składowaniem.Jeśli podczas kodowania dokonywałeś zatwierdzeń w głównej gałęzi, ale teraz chcesz przenieść te zatwierdzenia do innej gałęzi, jest to szybki sposób:
Skopiuj swoją bieżącą historię do nowego oddziału, przynosząc również wszelkie niezatwierdzone zmiany:
Teraz zmuś oryginalną „niechlujną” gałąź do wycofania: (bez przełączania się na nią)
Na przykład:
lub jeśli dokonałeś 4 zatwierdzeń:
Ostrzeżenie:
git branch -f master origin/master
będzie zresetować informacje śledzenia dla tego oddziału. Jeśli więc skonfigurowałeś swójmaster
oddział tak, aby działał w innym miejscuorigin/master
, konfiguracja zostanie utracona.Ostrzeżenie: Istnieje również niebezpieczeństwo, jeśli dokonasz zmiany bazy po rozgałęzieniu, co opisano tutaj . Jedynym sposobem, aby tego uniknąć, jest utworzenie nowej historii przy użyciu cherry-pick. Ten link opisuje najbezpieczniejszą głupią metodę . Jeśli masz niezatwierdzone zmiany, możesz chcieć
git stash
na początku igit stash pop
na końcu.źródło
Typowy scenariusz jest następujący: zapomniałem utworzyć nową gałąź dla nowej funkcji i wykonałem całą pracę w starej gałęzi funkcji. Powierzyłem całą „starą” pracę gałęzi master i chcę, aby moja nowa gałąź wyrosła z „master”. Nie dokonałem ani jednego zatwierdzenia mojej nowej pracy. Oto struktura gałęzi: „master” -> „Old_feature”
źródło
Jeśli go zatwierdzisz, możesz również wybrać pojedynczy identyfikator zatwierdzenia. Robię to często, kiedy zaczynam pracę w trybie master, a następnie chcę utworzyć lokalny oddział, zanim przejdę do mojego źródła /.
Jest wiele rzeczy, które możesz zrobić z cherry-pick, jak opisano tutaj , ale może to być dla ciebie przypadek użycia.
źródło
Może to być pomocne dla wszystkich korzystających z narzędzi do GIT
Komenda
Zmień gałąź - przeniesie twoje zmiany do nowej gałęzi. Następnie możesz zatwierdzić zmiany.
TortoiseGIT
Kliknij repozytorium prawym przyciskiem myszy, a następnie użyj TortoiseGit-> Switch / Checkout
SourceTree
Użyj przycisku „Do kasy”, aby zmienić gałąź. Zobaczysz przycisk „kasy” u góry po kliknięciu gałęzi. Zmiany z bieżącego oddziału zostaną zastosowane automatycznie. Następnie możesz je popełnić.
źródło
Użyłem @Robin odpowiedzi i listy wszystkiego, co zrobiłem,
! Jeśli repozytorium ma więcej niż jedną skrytkę, sprawdź, którą zastosować do nowej gałęzi:
i sprawdź poszczególne skrytki,
Lub sprawdź wszystkie skrytki jednocześnie:
źródło
Jest teraz naprawdę łatwy sposób, aby to zrobić za pomocą GitHub Desktop, ponieważ nie sądzę, aby była to wcześniej funkcja.
Wszystko, co musisz zrobić, to przejść do nowej gałęzi w GitHub Desktop, a poprosi Cię o pozostawienie zmian w bieżącej gałęzi (która zostanie ukryta) lub przeniesienie zmian ze sobą do nowej gałęzi. Wystarczy wybrać drugą opcję, aby wprowadzić zmiany do nowego oddziału. Następnie możesz zatwierdzić jak zwykle.
źródło