Czy istnieje sposób symulacji a git merge
między dwoma gałęziami, bieżącą gałęzią roboczą i główną, ale bez wprowadzania jakichkolwiek zmian?
Często mam konflikty, kiedy muszę zrobić plik git merge
. Czy istnieje sposób, aby najpierw zasymulować scalanie?
Odpowiedzi:
Nie sądzę, aby istniał sposób na symulowanie tego, co się stanie, dopóki nie spróbujesz scalenia. Jeśli jednak upewnisz się, że dane wyjściowe programu
git status
są puste przed scaleniem, możesz po prostu go wypróbować. Jeśli wystąpią konflikty, możesz natychmiast wrócić do stanu, w którym byłeś wcześniej:Od wersji Git 1.7.4 możesz również przerwać scalanie, wykonując:
(Jak wyjaśnia komunikat dotyczący zatwierdzenia, który dodał tę opcję , dodano to w celu zachowania spójności z
git rebase --abort
i tak dalej).źródło
--no-commit
jest moim zdaniem dużo łatwiejsze--no-commit
nadal zmieniasz indeks i drzewo robocze, co nie jest dokładnie „bez wprowadzania żadnych zmian” :) Chodzi mi o to, że kiedy ludzie pytają tego rodzaju pytanie, to generalnie dlatego, że nie są świadomi, że najlepszym sposobem, aby zobaczyć, jak przebiegnie scalanie, jest po prostu spróbować scalenia , często dlatego, że nie są świadomi tego, jak łatwo jest wrócić do stanu, w którym byli wcześniej gdyby okazały się problemy.git merge --abort
jest równoważne zgit reset --merge
kiedyMERGE_HEAD
jest obecne", więc cokolwiek jest łatwiejsze do zapamiętania :)Możesz użyć
git merge --no-commit
aby zapobiec faktycznemu zatwierdzeniu scalania, a jeśli nie podoba ci się, jak działa scalanie, po prostu zresetuj do pierwotnej głowy.Jeśli zdecydowanie nie chcesz sfinalizować scalania, nawet jeśli jest to szybkie przewijanie do przodu (a zatem z definicji nie ma konfliktów), możesz również dodać
--no-ff
.źródło
git merge --abort
istnieje - może masz na myśligit reset --merge
?rebase
tego nie ma--abort
forgit merge
.--no-ff
dorzucił. Aby zapobiec występowaniu ff scalania.--no-ff
jest tutaj prawie obowiązkowe, ponieważ--no-commit
nie zatrzymuje szybkich zmian.Jeśli chcę porównać zmiany w gałęzi tematycznej do opanowania, najłatwiej i najbezpieczniej jest wykonać następujące czynności:
Po zakończeniu scalania łatwo jest zobaczyć skonsolidowaną zmianę od wzorca
Po zakończeniu po prostu usuń gałąź trial_merge
W ten sposób gałąź główna nigdy się nie zmienia.
źródło
git checkout --detach
i testować, co chcesz. Później, jeśli chcesz zachować zmiany, zrób togit checkout -b new_branch
. A jeśli chcesz odrzucić swoje zmiany, wyewidencjonuj dowolną gałąź (git checkout master
).topic_branch
jest duży (jak to prawdopodobnie ma miejsce w przypadku tego pytania w pierwszej kolejności),diff master
wynik jest prawdopodobnie zbyt duży, abyś mógł się przyjrzeć, jeśli scalanie ma powodować konflikty.Używam :
zgodnie z dokumentacją :
To naprawdę nie jest symulacja, ponieważ nastąpi szybkie połączenie w przypadku braku konfliktów między dwiema gałęziami. Ale w przypadku konfliktów zostaniesz poinformowany i nic się nie stanie.
źródło
Mogłem ostatnio używać
git merge --abort
. Można tego jednak użyć tylko w przypadku konfliktu scalania. Jeśli jesteś pewien, że nie chcesz zatwierdzać, użyj innych wymienionych powyżej metod.źródło
git merge --abort
. Powinieneś w przyszłości potwierdzić swoją odpowiedź, określając, kto napisał odpowiedź, do której się odnosisz.Dlaczego po prostu nie utworzyć gałęzi jednorazowej (git checkout -b) i nie przeprowadzić w niej testowego scalania?
źródło
Nie wiem dokładnie, czy to jest twój przypadek , ale twoje pytanie pamiętaj, że czasami uruchamiam funkcję, zobowiązuję się w ciągu dni i wiele razy scalam na nim development.
W tym momencie tracę kontrolę nad dokładnymi plikami, które zmieniłem i dowiem się o tym dopiero, gdy moja funkcja zostanie zamknięta, a mój kod zacznie się rozwijać.
W tym przypadku dobrym sposobem, aby dowiedzieć się, jakie modyfikacje zostały wprowadzone (nie inne od scalenia), jest użycie Sourcetree.
Musisz kliknąć prawym przyciskiem na gałęzi podstawowej i wybrać
Diff Against Current
:Następnie sourcetree pokaże ci wszystkie modyfikacje, które zostaną scalone, jeśli scalisz swoją gałąź z gałęzią podstawową.
Oczywiście nie pokaże konfliktów, ale jest użytecznym narzędziem przy fuzjach.
źródło