Jak używać git merge -- squash?
Mam zdalny serwer Git, oto scenariusz, który chcę wykonać:
-
Dla każdego błędu/funkcji tworzę inną gałąź Git
-
Wciąż zatwierdzam mój kod w tej gałęzi Git z nie-oficjalnymi wiadomościami Git
-
W górnym repozytorium musimy wykonać jeden commit dla jednego błędu z oficjalną wiadomością Git
Więc jak Mogę scalić moją gałąź do zdalnej gałęzi, aby dostali tylko jeden commit dla wszystkich moich check-in (nawet chcę podaj komunikat commit)?
6 answers
Powiedz, że Twoja gałąź Naprawy Błędów nazywa się bugfix
i chcesz połączyć ją z master
:
git checkout master
git merge --squash bugfix
git commit
Pobierze wszystkie commity z gałęzi bugfix
, podzieli je na 1 commit i połączy z Twoją gałęzią master
.
Wyjaśnienie :
git checkout master
Przełącza się na Twoją master
gałąź.
git merge --squash bugfix
Pobiera wszystkie commity z gałęzi bugfix
i łączy ją z bieżącą gałęzią.
git commit
Tworzy pojedynczy commit z połączonego zmiany.
Pominięcie parametru -m
pozwala zmodyfikować wersję roboczą komunikatu zatwierdzającego zawierającego każdą wiadomość ze squashed commit przed sfinalizowaniem commita.
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-04-24 16:23:18
Chcesz połączyć z opcją squash. Jeśli chcesz to zrobić z jedną gałęzią na raz.
git merge --squash feature1
Jeśli chcesz scalić wszystkie gałęzie w tym samym czasie co pojedyncze commity, najpierw zmieniaj interakcję i squashuj każdą funkcję, a następnie merguj octopus:
git checkout feature1
git rebase -i master
Połącz w jeden commit, a następnie powtórz dla innych funkcji.
git checkout master
git merge feature1 feature2 feature3 ...
To ostatnie połączenie jest "ośmiornicą", ponieważ łączy wiele gałęzi na raz.
Hope this helps
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
2013-08-15 15:07:12
To, co w końcu mi to wyjaśniło, to komentarz pokazujący, że:
git checkout main
git merge --squash feature
Jest odpowiednikiem robienia:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
Kiedy chcę połączyć gałąź funkcji z 105 (!! nie chcę git rebase -i origin/master
, ponieważ muszę oddzielnie rozwiązywać konflikty scalania dla każdego z pośrednich commitów (a przynajmniej tych, których git sam nie potrafi rozgryźć). Użycie git merge --squash
daje mi pożądany wynik pojedynczego commita do scalania cała gałąź funkcji. I muszę tylko zrobić co najwyżej jedno ręczne rozwiązywanie konfliktów.
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
2014-08-19 15:59:21
Jeśli masz już git merge bugfix
na main
, możesz zmiażdżyć commit merge w jeden za pomocą:
git reset --soft HEAD^1
git commit
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-03-13 17:50:29
Połącz newFeature
gałąź do master
z niestandardowym commitem:
git merge --squash newFeature && git commit -m 'Your custom commit message';
Jeśli zamiast tego zrobisz
git merge --squash newFeature && git commit
Otrzymasz komunikat commit, który będzie zawierał wszystkie commity gałęzi newFeature
, które możesz dostosować.
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-17 11:10:32
For Git
Utwórz nową funkcję
Via Terminal / Shell:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
To nie zatwierdza go, pozwala najpierw go przejrzeć.
Następnie zatwierdź i zakończ funkcję z nowej gałęzi i usuń/zignoruj starą (tę, na której napisałeś).
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-07-12 15:14:14