Jestem nowym programistą - to moja pierwsza pozycja programistyczna.
Mój problem jest następujący: używamy git
- wycinam gałąź z naszego develop
oddziału, a następnie zaczynam pracę nad drobnym zadaniem, które mi przydzielono. Jest bardzo wolny, ponieważ jestem niedoświadczony. Do czasu, gdy jestem gotów połączyć moją gałąź z powrotem, develop
inni wprowadzili tak wiele zmian, że rozwiązywanie konfliktów jest przytłaczające (w rzeczywistości wydaje się, że łatwiej jest skrobać moją pracę i zacząć od nowa od zadania, co oczywiście nie jest trwałym rozwiązaniem ).
Jak temu zaradzić? Czy mogę zastosować inną taktykę niż „być lepszym w kodowaniu”? Mam zamiar porozmawiać o tym z moim przełożonym w przyszłym tygodniu.
Odpowiedzi:
Występują konflikty scalania, jeśli zmiany, które wprowadziłeś w oddziale, są zbliżone do zmian
develop
, które w międzyczasie dokonali Twoi koledzy w oddziale, to znaczy, jeśli ty i twoi koledzy zmieniliście te same wiersze kodu lub sąsiednie wiersze w tym samym pliku.Aby zmniejszyć prawdopodobieństwo konfliktu scalenia, możesz spróbować scalić wcześniej, aby koledzy zmienili w międzyczasie mniej wierszy lub możesz spróbować zmienić mniej wierszy samodzielnie.
Aby samodzielnie zmienić mniej wierszy, pamiętaj, aby wprowadzać tylko zmiany związane z zadaniem.
Jeśli chcesz eksperymentować na różne sposoby, aby osiągnąć swój cel, może niektóre z eksperymentów zmieniły linie, których tak naprawdę nie trzeba zmieniać? Cofnij te zmiany przed scaleniem.
Istnieje również kilka poleceń Git, które mogą pomóc Ci zmienić tak mało wierszy, jak to możliwe:
git diff
igit diff --staged
zobaczyć, które linie zmieniłeś.git add -p
aby dodać tylko niektóre zmiany w pliku.git commit --amend
igit rebase -i
do poprawiania zobowiązań, które już wykonałeś w lokalnym oddziale funkcji, zanim przekażesz je do innych repozytoriów Git.(Zmiana w kilka wierszy jak to możliwe, może również ułatwić recenzję pracę lub korzystać z narzędzi, które działają na różnicach pomiędzy popełnia takie jak
git cherry-pick
,git rebase
,git bisect
, igit blame
).Ale nawet jeśli zmniejszysz prawdopodobieństwo konfliktu scalania, nadal będziesz czasem napotykać konflikty scalania. Nie bój się ich, ale naucz się rozwiązywać konflikty.
źródło
git fetch
agit diff origin/develop
wyświetli podgląd połączenia (w pewnym sensie). Daje szansę wyczyścić zmiany, zanim pojawi się mnóstwo bezcelowych konfliktów.Zakładam, że używasz gita. Jeśli tak, skorzystaj z
git rebase -i
(-i
środki interaktywne). Spraw, aby codzienne zadanie (jeszcze częściej, jeśli to konieczne) bazowanie gałęzi na gałęzi deweloperskiej. Powoduje to stopniowe wprowadzanie zmian każdego dnia (przynajmniej), aby utrzymać aktualną gałąź funkcji. Jeśli podczas codziennego naliczania występują konflikty, musisz porozmawiać z zespołem o tym, kto nad czym pracuje.Jeśli uruchamiasz go codziennie, prawdopodobnie nie będziesz potrzebować części interaktywnej. Po prostu pozwól mu to zrobić.
Jestem dość doświadczonym programistą i wciąż zajmuje mi sporo czasu, aby przyśpieszyć nowy projekt. W twoim przypadku wygląda na to, że kilka osób pracuje jednocześnie nad tym samym projektem, więc jest to albo bardzo duży projekt, albo nowy projekt, który ewoluuje szybko. W obu przypadkach nie przejmuj się, jeśli przejście do obiegu zajmie Ci kilka miesięcy . Jeśli zmienię projekty na 2 lub 3 tygodnie, a następnie przestawię z powrotem, może minąć kilka godzin (a nawet dzień lub dwa), aby w pełni „wrócić do” projektu, który napisałem sam w 100%!
Krótko mówiąc, nie martw się, że jesteś teraz powolny. Sposobem na poprawę jest po prostu ćwiczyć. Nie bój się pytać innych programistów o aspekty projektów, których nie rozumiesz.
EDYTOWAĆ:
Lub użyj
merge
. To także opcja. Tak więc powyższe byłoby: „skorzystaj zgit rebase -i
(-i
środki interaktywne) lubgit merge
”. Jeśli chodzi o to, którego użyć, porozmawiaj o tym z resztą swojego zespołu. W obu przypadkach mogą (ale nie muszą) mieć silne preferencje. To jasne, niektórzy ludzie nie mają silne preferencje.źródło
git pull
który jest tylko kombinacjągit fetch
igit merge
(lub możesz dodać,--rebase
aby wykonać rebase zamiast scalenia). Zakładając, że masz tylko jeden dzień opóźnienia, to w sieci LAN prawdopodobnie zakończy się to w niecałą sekundę, może to potrwać kilka sekund przez Internet. Nawet przez Internet i przy niewielkich konfliktach scalania możesz być na bieżąco i bezproblemowo połączyć się w mniej niż minutę. Poświęcenie pięciu minut na cały tydzień jest o wiele lepsze niż spędzanie godziny pod koniec tygodnia na poważnym konflikcie scalania.git bisect
: Wycofane elementy mogą nawet się nie kompilować, więc niegit bisect
mają znaczenia dla wynikowych złamanych zmian. @maaartinus: Ja, na przykład, wolę prawdziwą historię od historii liniowej. Jeśli dokonasz zmiany, absolutnie musisz sprawdzić każdy nowy zatwierdzenie pod kątem zdrowia psychicznego, aby uniknąć szkodliwych kłamstw.Może to być oznaką złej inżynierii oprogramowania ze strony firmy. Zbyt wiele zależności, różne problemy z nakładającymi się funkcjami, próby rozwiązania problemów w niewłaściwej kolejności itp. Mogą spowodować opisaną sytuację. Sugeruję regularne łączenie
develop
się z twoim oddziałem podczas programowaniaźródło
Uważam, że zaakceptowane odpowiedzi są bardziej technicznym „sposobem korzystania z Git lepiej”, myślę, że jest to raczej problem zespołowy niż problem inżynieryjny lub narzędziowy.
Jeśli napotykasz wiele konfliktów scalania, oznacza to, że ty i ktoś inny w zespole stąpacie po sobie nawzajem.
Ty lub oni powinniście starać się rozwijać osobistą przestrzeń podczas kodowania i unikać pracy w obszarach, które są już zajęte.
W moim zespole dążymy do wysokiego stopnia odpowiedzialności za zadania.
Zwykle przejmuję pełną lub całkowitą własność dwóch lub trzech plików jednocześnie i pracuję nad nimi w oddziale przez co najmniej jeden dzień.
Zazwyczaj, jeśli ktoś dotknie tych plików, jest to absolutnie konieczne do ich własnych zadań, generalnie nie pracujemy razem nad tym samym blokiem zadań!
Jeśli okaże się, że musisz w ogóle dużo scalić, to albo cały kod twojego zespołu znajduje się w jednym miejscu (czego sam w sobie należy unikać), albo wszystkie twoje zadania są.
To powiedziawszy, jako nowy deweloper prawdopodobnie nie jesteś w stanie egzekwować, prosić, a nawet sugerować jakiejkolwiek restrukturyzacji.
Spodziewam się, że twoje zadania zostały przypisane jako rzeczy „do nauczenia się lin”, które powinny być rozsądnie dostępne na twoim poziomie umiejętności, aby ułatwić ci dołączenie do zespołu. Prawdopodobnie zostali zwolnieni z zadań współpracownika, który nadal pracuje w tym samym obszarze, stąd wasze konflikty scalania.
Rozwiązaniem tego jest rozwiązanie problemu, rozwiązanie problemów, radzenie sobie z konfliktami scalania najlepiej jak potrafisz i nie martw się zbytnio, o ile robisz wszystko, co w twojej mocy, to menedżer musi się martwić Twój postęp.
Z biegiem czasu będziesz coraz szybszy i bardziej pewny siebie,
źródło
Najważniejszą rzeczą w łączeniu jest to, że im dłużej czekasz, tym bardziej bolesne staje się. Problem staje się bardziej liniowy. Trzy razy więcej konfliktów to dziewięć razy więcej pracy. Istnieje kilka strategii:
Łącz się z gałęzią programistyczną za każdym razem, gdy się zmienia, dzięki czemu zawsze jesteś blisko i nigdy nie masz ogromnej liczby konfliktów.
Jeśli zabierasz dużo czasu, przyczyną może być to, że spędzasz większość czasu na zastanawianiu się, jakie są zmiany, a następnie na wprowadzeniu zmian. W takim przypadku należy połączyć się z gałęzią programistyczną przed rozpoczęciem rzeczywistych zmian kodu.
Porozmawiaj z kolegami na temat strategii unikania konfliktów. Występują konflikty, jeśli dwie osoby edytują ten sam kod. Nie tylko ten sam plik, ale ten sam kod. Potrzebuję więc nowej funkcji functionA, a ty potrzebujesz nowej funkcji functionB, i oboje dodajemy ją na końcu tego samego pliku, mamy konflikt. Jeśli dodamy go w różnych miejscach, nie będzie konfliktu. Jeśli oboje dodamy go w miejscu pliku, do którego logicznie należy, istnieje prawdopodobieństwo, że nie będziemy mieć konfliktu.
Jeśli masz konflikty, zdobądź dobre narzędzie do porównywania, abyś mógł porównać gałąź rozwoju przed scaleniem, kod przed scaleniem, kod oryginalny i scalony i scalić ręcznie.
W najgorszym przypadku: nie wyrzucasz swojej pracy, ale używasz dobrego narzędzia do porównywania, aby dowiedzieć się dokładnie, jakie zmiany dokonałeś, ponownie uruchomić programowanie i zastosować wszystkie zmiany, które wprowadziłeś ręcznie, zamiast ich ponownego wpisywania.
źródło
Rozwiązywanie konfliktów
git merge
jest często łatwiejsze niż wgit rebase
. W Git Merge możesz zobaczyć całą listę plików, które zostały zmodyfikowane jednocześnie. Bez względu na to, ile zobowiązań wykonali inni współpracownicy, będziesz musiał połączyć się raz . Dzięki przepływowi pracy w bazie danych może się zdarzać, że ciągle pojawiają się te same konflikty i trzeba je przeglądać ręcznie. Możesz w końcu naprawić 13. zatwierdzenie i czuć, że nie widzisz światła z tunelu .Z mojego doświadczenia wynika, że gdy próbowałem naiwnie rozwiązywać powtarzające się konflikty bazy, straciłem czyjeś modyfikacje lub aplikację, która nawet się nie skompilowała. Często ja i współpracownicy wykonaliśmy wiele pracy, ale ogarnęło mnie tak duże skomplikowanie powtarzających się konfliktów, że musieliśmy przerwać i stracić naszą poprzednią pracę po kilku zobowiązaniach dotyczących rebase.
Mam zamiar zasugerować kilka technik, ale mogą one tylko ułatwić łączenie niż zautomatyzować zadanie.
Zauważyłem również złe nawyki w przepływach pracy Git w moich zespołach. Często ludzie nadmiernie angażują się w swoje oddziały. Osobiście byłem świadkiem, jak programista dodaje 10 do 20 zatwierdzeń oznaczonych jako „fix”, z których każdy zatwierdza jedną lub dwie linie. Zgodnie z naszymi zasadami zatwierdzenia są oznaczone biletami JIRA, aby dać Ci pomysł.
@JobobRobbins sugeruje wykonanie
git rebase
codziennego zadania. Chciałbym przyspieszyć jego podejście.Najpierw użyj raz bazy, aby zmniejszyć liczbę zatwierdzeń do garstki. I bazuj tylko na oryginalnej gałęzi developerskiej, która jest zatwierdzeniem, z którego rozgałęziłeś się. Kiedy mówię garstkę, mógłbym mieć na myśli 3 lub 4 (np. Cały interfejs, wszystkie zaplecze, wszystkie łatki do baz danych) lub dowolną ludzką rację. Po ich konsolidacji użyj
fetch
i przeprowadź rebase w gałęzi upstream. To nie uchroni cię przed konfliktem, chyba że Twój zespół dokona przeglądu własnego podejścia, ale sprawi, że twoje życie będzie mniej bolesne.Jeśli masz dodatkowe pytania na temat konkretnych zadań, przeszukaj i zapytaj w Stackoverflow.
[Edytuj] na temat zasady braku reformatowania i zwiadowców. Lekko przeformułowałem format RE, aby podkreślić, że mam na myśli zadanie formatowania od zera całego pliku źródłowego, w tym kodu, którego nie dotknąłeś. W przeciwieństwie do tego, aby zawsze formatować własny kod, który jest całkowicie nieprzyzwoity, wielu programistów, w tym ja, jest używanych do przeformatowania całego pliku za pomocą możliwości IDE. Gdy inni dotkną pliku, nawet jeśli zmienione linie i semantyka nie zostaną zmienione, Git uzna go za konflikt. Tylko bardzo potężny edytor rozpoznający język może sugerować, że konflikt dotyczy tylko formatowania i automatycznego scalania najlepiej sformatowanego fragmentu. Ale nie mam dowodów na istnienie takiego narzędzia.
W końcu zasada zwiadowcy nie nakazuje ci sprzątać bałaganu innych ludzi. Tylko twój.
źródło
Po pierwsze, nie myśl o odrzuceniu zmian. Stracisz możliwości uczenia się procesu scalania.
Po drugie, znajdź osobę, która pracowała nad plikami powodującymi konflikt. Możesz zobaczyć historię. Porozmawiaj z osobą i rozwiąż konflikty w tych plikach. Zrób to samo w przypadku innych konfliktów.
Jeśli konfliktów jest zbyt wiele, twoje zadanie może być niewielkie, ale powtarzalne. Spróbuj znaleźć wzór. Pomogłoby to rozwiązać konflikty za pomocą narzędzi klienta Git UI. Używam TortoiseGit. Pomaga w łączeniu.
I do unikania w przyszłości,
Bardzo dobrą praktyką jest regularne łączenie gałęzi programistycznej z gałęzią funkcji.
Jeśli masz włączony CI, sprawdź, czy narzędzie CI zapewnia kompilację gałęzi. Powinno to opierać się na każdym sprawdzeniu dokonanym w gałęzi funkcji, ale po scaleniu rozwijaj gałąź.
źródło
Powinieneś regularnie uruchamiać (codziennie) polecenie „git fetch” (nie git pull) z gałęzi programistycznej. Spowoduje to, że inne osoby dokonają zmian i wprowadzą je do gałęzi funkcji bez próby zintegrowania zmian z gałęzią.
O tym powinieneś porozmawiać z głównym deweloperem (niekoniecznie z kierownikiem), ponieważ Twoja firma może mieć własne standardy lub zalecane sposoby rozwiązania tego problemu; to jest bardzo powszechne. Nie czekaj do następnego tygodnia - dowiedz się teraz o tym procesie i zapytaj, czy możesz wykonać trywialną pracę (taką jak formatowanie kodu lub dodawanie komentarzy), aby przetestować proces.
źródło
Oczywiście przede wszystkim należy unikać pracy wielu osób nad tymi samymi plikami, przynajmniej w sposób, który prowadzi do trudnych konfliktów. Dodawanie rzeczy do wyliczeń nie stanowi problemu, o ile używany jest dobry format kodu. Zmiana przepływu sterowania na różne sposoby i przenoszenie kodu jest znacznie trudniejsze. Czasami jest to jednak nieuniknione. Podczas rozwiązywania naprawdę skomplikowanych konfliktów będziesz musiał zadawać pytania.
To powiedziawszy, widzę wiele odpowiedzi zalecających regularne łączenie / bazowanie. Byłbym o wiele mniej entuzjastycznie nastawiony do tego rodzaju porad. Twoim celem w tym momencie jest uczynienie procesu rozwiązywania konfliktu tak łatwym i bezpiecznym, jak to możliwe. Jedną z rzeczy, która ogromnie pomoże w tym procesie, jest natychmiastowe udostępnienie tylu testów regresji, w tym nowych, które są częścią nowej funkcji. Jeśli bardzo regularnie synchronizujesz swój oddział z programistą, zawsze będziesz musiał rozwiązać konflikty, dopóki nie skończysz w rzeczywistości implementować swojej funkcji. A to oznacza, że trudniej będzie dowiedzieć się, co powinien zrobić kod, ponieważ nie zostało to zrobione. Przed próbą scalenia upewnij się, że twoja gałąź jest spójną jednostką zmian. Nawet lepiej,
Starałem się nie wchodzić w meritum bazowania na scalaniu, co prawdopodobnie dotyczy innego pytania. W tym kontekście narzędzia tak naprawdę nie mają znaczenia.
źródło
Brzmi to jak idealny scenariusz do programowania w parach !
Więcej informacji o korzyściach i podstawowych podejściach:
https://gds.blog.gov.uk/2018/02/06/how-to-pair-program-effectively-in-6-steps/
Z czasem przyspieszysz od pracy na własną rękę, ale może to być zniechęcające, dopóki nie nadejdzie ten czas, a czasem jest to również długa droga. Ponadto, podczas gdy ludzie mogą szybko nauczyć się przebywania w stresującym środowisku, zawsze zmuszeni do nadrobienia zaległości, inni, którzy nie uczą się dobrze pod stałą presją, będą mieli trudności.
Zamiast pracować nad własnym oddziałem i starać się nadążyć za innymi deweloperami, którzy są oczywiście znacznie szybsi od ciebie, zamiast tego pracujesz bezpośrednio (ten sam komputer) z innym deweloperem. W ten sposób otrzymujesz natychmiastowe porady i prawdopodobnie zbierzesz wskazówki, jak przyspieszyć itp.
Wypracowałbyś najlepsze podejście do konkretnego kodu w swoim projekcie, ponieważ programowanie parami nie zawsze ma sens w przypadku niektórych projektów - choć prawdopodobnie zawsze ma sens uczenie się, nawet jeśli po prostu siedzisz i patrzysz na kogoś bardziej doświadczonego niż ty (o ile są dobrym twórcą, doświadczenie niekoniecznie oznacza, że stosują dobre praktyki).
Siedzenie z szybszym, bardziej doświadczonym deweloperem może pomóc:
Moja rada to omawianie programowania par z innymi programistami, a następnie skontaktowanie się z przełożonym. Jeśli są przyzwoici, docenią twoją inicjatywę, która ma większą szansę na wypromowanie zalet programowania w parach (jeśli tego potrzebują, większość ludzi o tym wie i powszechnie wiadomo, dlaczego to pomaga).
źródło
Tutaj jest kilka podstawowych problemów. Twoje problemy łączenia się najprawdopodobniej nie są twoją winą i częściej są objawem złych praktyk.
1) Idealnie byłoby połączyć swój oddział w rozwój każdego dnia. Postaraj się mieć działający kod przynajmniej raz dziennie, który przejdzie wszystkie testy, abyś mógł się połączyć z programowaniem.
2) Jeśli nie masz działającego kodu w którymkolwiek momencie podczas zwykłego dnia pracy, prawdopodobnie masz zbyt duże fragmenty kodu, aby pracować. Musisz podzielić swoje zadanie na mniejsze zadania, które można ukończyć (najlepiej niezależnie od siebie) szybciej, aby można je było scalić.
3) Twoje pliki projektów są prawdopodobnie zbyt duże. Jeśli istnieje wiele konfliktów scalania dla pliku, zbyt wiele osób pracuje nad jednym plikiem. Idealnie, nad czym jedna osoba pracuje, powinna być oddzielona od tego, nad czym wszyscy inni pracują.
4) Twój zespół może być za duży. Jeśli łatwiej ci wyrzucić całą funkcję i zacząć od nowa, prawdopodobnie zbyt wiele osób popełnia kod do tego samego repozytorium.
5) Być może nie masz spójnych standardów formatowania kodu. Jeśli nie wszyscy konsekwentnie używacie tego samego formatowania kodu, pojawi się wiele różnych konfliktów dla tego samego kodu. W zależności od konfiguracji gita mogą one nawet sprowadzać się do konfliktów białych znaków (zakończenia linii, wcięcia, tabulatory a spacje).
6) Ludzie mogą wypychać swoje zmiany bezpośrednio do działu rozwoju.
Oto, co możesz zrobić: 1) Jeśli nie możesz scalić się z programowaniem każdego dnia, scalaj / rebase rozwijaj się do swojego oddziału codziennie (lub częściej).
2) Spróbuj oddzielić swój kod od kodu każdego innego.
3) Porozmawiaj z resztą zespołu o mniejszych funkcjach, spójnych standardach kodowania i lepszej organizacji kodu (mniejsze pliki, mniejsze funkcje).
źródło
Przez większość czasu tak właśnie robię, kiedy po raz pierwszy naprawiam błąd lub wprowadzam zmiany w systemie, uczę się, jak to zrobić. Następnym razem, gdy naprawię ten sam błąd, zajmie to tylko 1% czasu, ponieważ teraz rozumiem problem.
Uważam też, że kiedy robię trochę pracy, piszę lepszy kod .....
Dlatego nie ma nic złego w tworzeniu nowego oddziału od mistrza, ponawianiu pracy w nim, przy użyciu „prywatnego oddziału”, aby przypomnieć ci, co musisz zrobić.
Możliwe jest również, że odkryłeś sposób podziału zmiany na logiczne i poprawne części, z których każda po scaleniu zostaje scalona z gałęzią master. Na przykład można przeprowadzić testy jednostkowe i zmiany w kodzie zaplecza, a następnie scalić je. Następnie w osobnej operacji można wprowadzić zmiany interfejsu użytkownika, które z nich korzystają, a zatem mniejsze jest ryzyko, że ktoś edytuje ten sam plik interfejsu użytkownika.
źródło
Jeśli nie chcesz zbyt często łączyć gałęzi programistycznej z gałęzią, możesz uzyskać przepływ pracy bardziej podobny do svn, używając
git pull --rebase
. Spowoduje to wyciągnięcie nowych commits i ponowne ich zatwierdzenie. Oznacza to, że kiedy scalisz swoją gałąź w celu rozwoju, będzie to szybkie przewijanie do przodu (tak jakbyś dodał wszystkie swoje poprzednie zatwierdzenia w tym samym czasie jeden po drugim) i nie będzie żadnych konfliktów scalania, ponieważ rozwiązałeś je wszystkie podczasgit pull --rebase
.Ale im więcej zobowiązań podejmiesz przed scaleniem gałęzi w rozwijającą się lub rozwijającą się w gałęzi, tym bardziej skomplikowane będzie uzyskanie kolejnego podziału bazy i nieco podważy sens gałęzi cech, ponieważ twoja gałąź istnieje tylko tak długo, jak jest połączona .
źródło
Kiedy pracujesz we wspólnych plikach, w żaden sposób ty lub twoi koledzy z drużyny musicie rozwiązać wszystkie konflikty przed połączeniem zakończeń, dlatego nie martw się . Nadal pracujesz nad projektem i bądź dumny ze swojej pracy. Teraz, aby wykonać mądrzejszy ruch, możesz postępować zgodnie z poniższymi sugestiami.
Podziel zadania niezależnie:
Przed rozpoczęciem pracy zaplanuj i podziel całe zadania w taki sposób, aby przydzielone zadanie dla każdego członka zespołu było jak najbardziej niezależne i modułowe (aby uniknąć potencjalnych konfliktów podczas opracowywania). Możesz podejść do swojego lidera scrum, aby przypisać ci pewne niezależne zadania, gdy jesteś początkujący.Scalanie szczegółowych zatwierdzeń częstych:
Nie czekaj na ukończenie pełnego zadania przed końcowym marge. Oczywiście wszelkie większe zadania można podzielić na wiele podzadań. Dlatego lepszym podejściem jest łączenie mniejszych zatwierdzeń dla mniejszych podzadań jednocześnie, aby uniknąć nieporęcznego rozwiązywania konfliktów.Często wycofuj swój oddział:
Wykonuj praktykę częstego bazowania na oddziale lokalnym za pomocą oddziału zdalnego. Możesz użyć poniższego polecenia, aby często zmienić bazę na oddział lokalny na zdalny,
To jak dotąd najbardziej przydatne polecenie git w moim życiu programistycznym.
Ściśle współpracuj z członkami drużyny:
Jeśli naprawdę potrzebujesz pracować równolegle z kolegą z zespołu w ramach wspólnego zadania, pracuj wspólnie. Może poczekać, aż uniknie skomplikowanego rozwiązania konfliktu, ponieważ jesteś początkującym i ona jest ekspertem.
Bądź przyzwyczajony z opcjami git:
Wykorzystaj moc narzędzi do łączenia git. Istnieje wiele wygodnych sposobów rozwiązywania konfliktów podczas łączenia. Strategie łączenia czasami mogą bardzo pomóc. Bądź przyzwyczajony i nieustraszony dzięki poleceniom git.
źródło