W git, jaka jest różnica między merge --squash i rebase?
Jestem nowy w git i staram się zrozumieć różnicę między squash i rebase. Jak rozumiem, podczas rebazy wykonujesz squasha.
3 answers
Zarówno git merge --squash
jak i git rebase --interactive
mogą stworzyć" zgnieciony " commit.
Ale służą innym celom.
Wytworzy zgnieciony commit na gałęzi docelowej, bez zaznaczania relacji merge.
(Uwaga: nie tworzy commita od razu: potrzebujesz dodatkowego git commit -m "squash branch"
)
Jest to przydatne, jeśli chcesz całkowicie wyrzucić gałąź źródłową, idąc z (schematu pobranego z więc pytanie):
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
Do:
git merge --squash tmp
git commit -m "squash tmp"
X-------------------G stable
/
a---b---c---d---e---f---g tmp
A następnie usunięcie tmp
gałęzi.
Powtarza niektóre lub wszystkie commity na nowej bazie, pozwalając na squash (lub ostatnio "fix up", zobacz to więc pytanie), przechodząc bezpośrednio do:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
Jeśli zdecydujesz się zmiażdżyć wszystkie commity tmp
(ale w przeciwieństwie do merge --squash
, możesz odtworzyć niektóre, A zmiażdżyć inne).
Więc różnice są:
-
merge
nie dotyka Twojej gałęzi źródłowej (tmp
tutaj) i tworzy pojedynczy commit tam, gdzie chcesz. -
rebase
pozwala przejść na tę samą gałąź źródłową (nadaltmp
) z:- nowa baza
- a cleaner history
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-05-23 12:18:15
Merge squash łączy drzewo (sekwencję commitów) w jeden commit. Oznacza to, że squashuje wszystkie zmiany dokonane w N commity w jeden commit.
Rebasing to ponowne bazowanie, czyli wybór nowej bazy (commit nadrzędny) dla drzewa. Może termin mercurial na to jest bardziej jasny: nazywają to przeszczepem, ponieważ chodzi o to, że: wybranie nowego podłoża (commit rodzic, korzeń) dla drzewa.
Wykonując interaktywną rebase, masz możliwość albo squash, pick, Edytuj lub Pomiń zmiany, które zamierzasz zmienić.
Mam nadzieję, że to było jasne!
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
2010-03-11 18:15:41
Merge commity: zachowuje wszystkie commity w Twojej gałęzi i przeplata je z commitami w gałęzi bazowej
Merge Squash: zachowuje zmiany, ale pomija poszczególne commity z historii
Rebase: przenosi całą gałąź feature do początku na końcu gałęzi master, skutecznie włączając wszystkie nowe commity w master
Więcej o tutaj
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-31 13:34:59