Przenieś istniejącą, niezakontraktowaną pracę do nowej gałęzi w Git
Zacząłem trochę pracować nad nową funkcjonalnością i po krótkim kodowaniu zdecydowałem, że ta funkcjonalność powinna być na własnej gałęzi.
Jak przenieść istniejące niezarejestrowane zmiany do nowej gałęzi i zresetować bieżącą?
Chcę zresetować bieżącą gałąź, zachowując istniejącą pracę nad nową funkcją.
5 answers
Użyj następującego:
git checkout -b <new-branch>
To pozostawi bieżącą gałąź w niezmienionej formie, utworzy i wykona nową gałąź i zachowa wszystkie zmiany. Następnie możesz utworzyć commit za pomocą:
git add <files>
I zatwierdź nową gałąź za pomocą:
git commit -m "<Brief description of this commit>"
Zmiany w katalogu roboczym i zmiany w indeksie nie należą jeszcze do żadnej gałęzi. To zmienia się tam, gdzie te zmiany zakończyłyby się.
Jeśli nie zresetujesz oryginalnej gałęzi, zostanie taka, jaka jest. Ostatni commit na <old-branch>
nadal będzie taka sama. Dlatego ty checkout -b
, a następnie popełnić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 11:42:20
Alternatywnie:
-
Zapisz bieżące zmiany w schowku tymczasowym:
$ git stash
-
Utwórz nową gałąź na podstawie tego schowka i przełącz się na nową gałąź:
$ git stash branch <new-branch> stash@{0}
Wskazówka: Użyj klawisza tab, aby zmniejszyć wpisywanie nazwy skrytki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-15 22:50:34
Jeśli tworzyłeś commity w swojej głównej gałęzi podczas kodowania, ale teraz chcesz przenieść te commity do innej gałęzi:
-
Skopiuj bieżącą historię na nową gałąź, wprowadzając również niezatwierdzone zmiany:
git checkout -b <new-feature-branch>
-
Teraz Wymuś, aby oryginalna gałąź "bałaganu" cofnęła się: (bez przełączania się na nią)
git branch -f <previous-branch> <earlier-commit-id>
Na przykład:
git branch -f master origin/master
Lub gdybyś zrobił 4 commity:
git branch -f master HEAD~4
Ostrzeżenie: wygląda na to, że git branch -f master origin/master
zresetuje informacje o śledzeniudla tej gałęzi. Więc jeśli skonfigurowałeś swoją gałąź master
do wypychania w inne miejsce niż origin/master
wtedy ta konfiguracja zostanie utracona.
Alternatywą jest użycietej techniki resetowania . Ale te instrukcje odrzucą wszelkie niezatwierdzone zmiany, które masz. Jeśli chcesz je zatrzymać, schowaj je najpierw i odkręć w koniec.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 04:05:16
Jeśli go zatwierdzisz, możesz również wybrać pojedynczy identyfikator zatwierdzenia. Robię to często, gdy zaczynam pracę w master, a następnie chcę utworzyć lokalną gałąź, zanim wypchnę się do mojego pochodzenia/.
git cherry-pick <commitID>
Jest wiele rzeczy, które możesz zrobić z cherry-pick, jak opisano tutaj , ale może to być przypadek użycia dla Ciebie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-30 20:58:06
Wspólny scenariusz jest następujący: zapomniałem utworzyć nową gałąź dla nowej funkcji i wykonywał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 "mistrza". Nie popełniłem ani jednego zobowiązania z mojego nowego dzieła. Oto struktura oddziału: "master" - > "Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 16:07:54