Pierwszą rzeczą, którą chcę wyjaśnić, jest to, że nazwy gałęzi są tylko aliasem dla konkretnego zatwierdzenia. zatwierdzenie jest tym, co działa git, kiedy ciągniesz, pchasz scalanie i tak dalej. Każde zatwierdzenie ma unikalny identyfikator.
Kiedy wykonujesz $ git merge, git próbuje szybko przewinąć bieżącą gałąź do zatwierdzenia, do którego odwołuje się gałąź (innymi słowy, obie nazwy gałęzi wskazują na to samo zatwierdzenie.) Ten scenariusz jest najłatwiejszy dla git do czynienia, ponieważ nie ma nowego zatwierdzenia. Pomyśl o mistrzu wskakującym na lilipada, na którym odpoczywa twoja gałąź. Możliwe jest ustawienie flagi --no-ff, w którym to przypadku git utworzy nowe zatwierdzenie, niezależnie od tego, czy wystąpiły konflikty kodu.
W sytuacji, gdy występują konflikty kodu między dwiema gałęziami, które próbujesz scalić (zwykle dwie gałęzie, których historia zatwierdzeń ma wspólne zatwierdzenie w przeszłości), szybkie przewijanie do przodu nie działa. git może nadal być w stanie automatycznie scalać pliki, o ile ta sama linia nie została zmieniona przez obie gałęzie w pliku powodującym konflikt. w takim przypadku git połączy dla ciebie pliki powodujące konflikt i automatycznie je zatwierdzi. Możesz zobaczyć podgląd działania git, wykonując $ git diff --cached. Możesz też przekazać flagę --no-commit do polecenia scalania, co spowoduje pozostawienie zmodyfikowanych plików w indeksie, które musisz dodać i zatwierdzić. Ale możesz $ git różnicować te pliki, aby sprawdzić, co zmieni scalanie.
Trzeci scenariusz dotyczy konfliktów, których git nie może automatycznie rozwiązać. W takim przypadku musisz je ręcznie scalić. Moim zdaniem jest to najłatwiejsze do wykonania ze scaleniem, takim jak scalenie araxis lub p4merge (za darmo). Tak czy inaczej, musisz wykonać każdy plik jeden po drugim. Jeśli scalanie wydaje się być zablokowane, użyj $ git merge - kontynuuj, aby przesuwać go dalej. Git powinien powiedzieć ci, czy nie może kontynuować, a jeśli tak, to dlaczego nie. Jeśli w pewnym momencie poczujesz, że scaliłeś scalenie, możesz wykonać $ git merge --abort, a wszelkie scalenia zostaną cofnięte i możesz zacząć od nowa. Po zakończeniu każdy scalony plik będzie plikiem zmodyfikowanym, który należy dodać i zatwierdzić. Możesz sprawdzić, gdzie znajdują się pliki ze statusem $ git. Jeśli scalone pliki nie zostały jeszcze zatwierdzone. Musisz to zrobić, aby zakończyć scalanie.
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, spowoduje tofatal: cannot do a partial commit during a merge.
. I oczywiście „częściowe zatwierdzenia” nie wydają się być dokumentowane ani omawiane nigdzie na stronach git man. Wykonaniegit merge
poprawki po zakończeniu powoduje,Please, commit your changes before you can merge.
że narzędzie What a broken ass ...