System Kontroli Wersji
8 godz. 23 min · Git · Full-stack i Programowanie
Mateusz KuleszaSenior Software Developer, Konsultant, TrenerInne systemy wersjonowania wymagają konfiguracji specjalnych serwerów - a z GIT wystarczy do tego twój komputer. GIT pozwoli Ci zapisywać kolejne wersje twojej pracy lub eksperymentować z różnymi zmianami. Jeśli chcesz tworzyć kopie zapasowe - w kursie zobaczysz jak tworzyć klony twojego projektu oraz jak wysyłać i pobierać aktualne zmiany pomiędzy klonami.Pierwsza sekcja pozwoli Ci zyskać pewność w samodzielnej pracy z GITem nim podejmiesz się pracy w zespole. Dowiesz się jak przygotować zestaw zmian, ignorować pliki tymczasowe, jak tworzyć migawki z opisami zmian, a następnie przeglądać i porównywać zmiany dokonane nawet miesiące temu. W kolejnej części kursu dowiesz się jak wycofywać zmiany, przywracać wcześniejsze wersje i edytować historię zmian. Zobaczysz, że w GIT “nic nie ginie”. Pokażę Ci jak możesz odzyskać pozornie utracone zmiany oraz jak naprawić historię zmian łącząc, dzieląc, a nawet zmieniając kolejność dokonanych wcześniej zmian.
Jesteś w trakcie pracy nad ważnym projektem, i nagle musisz oderwać się od pracy, by wykonać jedną, szybką poprawkę? W GIT możesz błyskawicznie przełączyć się na inną wersje projektu, lub po prostu “odłożyć na później” pliki nad którymi pracujesz i wrócić do nich kiedy tylko tego potrzebujesz. W tej części kursu zobaczysz jak pracować na gałęziach, dodawać etykiety oraz przełączać różne wersje plików. Dowiesz się jak porównywać oraz eksperymentować z plikami bez ryzyka utraty danych. Co najważniejsze - nauczysz się łączyć i dzielić wiele różnych wersji twojej pracy. Zobaczysz, jak praca na gałęziach nie tylko zwiększy Twoją swobodę i elastyczność w codziennej pracy, ale również jak gałęzie pozwalają wielu osobom na równoległą pracę na tych samych plikach bez martwienia się o utratę danych lub niespójne wersje.
W kursie dowiesz się nie tylko jak zapamiętywać zmiany, ale także jak je opisywać i oznaczać, tak, by nawet miesiące później móc łatwo odnaleźć odpowiednią wersję pliku, lub by dowiedzieć się kiedy, kto i dlaczego zmieniał dany plik. Zobaczysz jak dobre praktyki w opisywaniu zmian wspomagają pracę grupową. Dowiesz się jak pobrać lub wysłać zestaw zmian na serwer oraz jak połączyć zmiany swoje, lub zmiany otrzymane od współpracownika. Dodatkowo, zobaczysz jak bezpiecznie rozwiązać problem konfllktujących zmian w plikach lub jak przenieść zmiany z wersji do wersji. W kursie dowiesz się także jak w bardzo prosty sposób korzystać z pozornie najtrudniejszej funkcji GITa, jaką jest polecenie “rebase”. Zobaczysz jak usprawni się Twoja praca, gdy będziesz mógł w jednym kroku zbudować historię zmian. Jeśli źle zapisałeś zmiany, nie podoba Ci się historia zmian, lub po prostu chciałbyś łatwo uniknąć konfliktów - git rebase będzie Twoim nowym ulubionym narzędziem.
…zmieniło ten sam plik, trzeba jakoś te zmiany połączyć. Zobaczysz jak GIT pozwala wysłać zestaw zmian na serwer, pobrać zmiany innych osób i automatycznie dołączyć te zmiany w odpowiednich miejscach. Co jednak jeśli dwie osoby zmienią tę samą linię w pliku? W kursie dowiesz się nie tylko jakie są różne sposoby i strategie łączenia zmian, ale także jak dzięki historii będziesz wiedział dlaczego zmiana w pliku została wprowadzona. Dzięki narzędziu rebase będziesz mógł zaaplikować wszystkie zmiany w odpowiedniej kolejności i w odpowiednim miejscu.
W kursie poznasz także usługę GitHub. GitHub to nie tylko usługa udostępniająca repozytoria dla GIT - umożliwia również tzw. społecznościowe podejście do tworzenia… I to nie tylko kodu. Zobaczysz, że dzięki GitHub praca nad kodem aplikacji czy nową książką może odbywać się zespołowo. Pokażemy Ci jak publikować swoje zmiany oraz jak zgłaszać je innym do przejrzenia i połączenia z ich wersją. Poznasz także sposoby planowania pracy, przydzielania zadań i zarządzania postępem ich wykonania - wszystko na twoim koncie na portalu GitHub. Oprócz poleceń i funkcji GIT w tym kursie pokażemy Ci również, na prostych, praktycznych przykładach, typowe techniki i praktyki pracy z GIT. Podczas kursu symulujemy zespół budujący prostą stronę internetową. Co ważne, nie musisz znać HTML by skorzystać z tej części kursu! Zobaczysz jak wygląda praca z perspektywy jednej osoby, co zrobić gdy musisz przerwać pracę i przełączyć się na inne zadanie oraz jak przygotować Twoją pracę do podzielenia się nią z zespołem. Pokażemy kilka przykładów organizacji pracy. Zobaczysz prace z małym, centralnym repozytorium, a także modele pracy rozproszonej, z której korzystają duże projekty typu open-source. GIT to branżowy standard, który obowiązuje praktycznie we wszystkich firmach zajmujących się tworzeniem aplikacji lub stron internetowych. Sprawia to, że wiedza, którą zdobędziesz po przerobieniu tego kursu, bezpośrednio przełoży się na efektywność Twojej pracy oraz projekty, które tworzysz.
Kurs przygotowany został z myślą o wszystkich, którzy chcą nauczyć się najbardziej popularnego i elastycznego systemu kontroli wersji i wykorzystać go do efektywnej pracy w zespole, jak i na potrzeby indywidualnych projektów. Jest również przeznaczony dla każdego, kto pracuje z kodem źródłowym i chciałby nie tylko tego, by jego zmiany były bezpieczne, ale by jednocześnie mieć swobodę pracy na kilku równoległych wersjach kodu oraz móc swobodnie eksperymentować nie bojąc się o utratę danych. Jeśli chciałbyś dowiedzieć się jak sprawnie korzystać z Githuba oraz zrozumieć, czemu ten system jest tak chętnie stosowany przez programistów na całym świecie - to najlepsza metoda!
W poprzednich lekcjach dowiedziałeś się jak przy użyciu poleceń git log i git diff odnaleźć poszczególne wersje
twojego pliku.
Zobaczyć jak on zmieniał się w czasie a następnie przy użyciu polecenia git
chekcout.
Widziałeś jak można poszczególne pliki po prostu wydobyć z historii i przywrócić ich poprzednie wersje.
Do naszego katalogu roboczego.
Jednak było to niewygodne szczególnie gdy w ramach jednego commita w ramach jednej zmiany mieliśmy wiele różnych
plików robiliśmy tylko jakieś małe wersje nie chcemy przywracać całych plików lub przywracać ręcznie
wielu plików każdego osobno chcieliśmy odwrócić zmianę którą dokonaliśmy w poprzednim commicie.
I tutaj np. git log mamy już troszkę dużo.
Zróbmy sobie git Lock powiedzmy 5 ostatnich zmian i przywrócimy plik witaj i chciałbym to cofnąć ale nie chciałbym
wchodzić w szczegóły zobaczyć dokładnie które pliki były zmieniane.
Chciałbym po prostu zastosować odwrotną operację czyli przywrócić tylko te zmiany odwrócić które były
wykonane w tym commicie.
Zobaczmy sobie ten commit git show.
Wystarczy tylko pierwsze kilka znaków żeby on odnalazł ten commit i tutaj widzisz były usunięte linie witaj świecie i
jeszcze jedna linia i była przywrócona linia witaj świecie.
I co bym chciał zrobić.
Chciałbym stworzyć commit odwrotny od tego czyli taki komitet który usunie tą linię witaj świecie i
przywróci te usunięte linie.
Jest to bardzo proste wystarczy że będę miał tutaj id tego commita i wykonam polecenie git revert czyli przywróć
właściwe odwróć z powrotem.
Ten commit i podaje dokładną zmianę które chcą zaaplikować aby w odwrotnym kierunku sprawdźmy i teraz taka
zmiana od razu powoduje mi commit dlatego że jak widzisz nie modyfikuje pojedynczych plików tylko chcę od razu scommitować
nową wersję która będzie cofnięciem konkretnego commita.
Czyli tak standardowo otworzy się edytor muszę podać tutaj wiadomość ja sobie ustawię tą domyślną czyli revert
przywrócono plik witaj i jak widzisz mam tu dodatkowe informacje też który commit był odwrócony.
Dzięki temu też łatwo później odnaleźć oryginalny commit który jest w tym momencie wycofany.
Ja tą wiadomość zapiszę mam stworzony tu.
Jak widzisz nowy commit.
Mój katalog roboczy jest pusty bo nie zmieścił poszczególnych plików tylko od razu stworzyłem cały commit więc
git log
powiedzmy 3.
Jak widzisz tutaj jest mój commit przywrócony plik witaj a zaraz po nim jest commit który odwraca tę operację
czyli jak tutaj usunąłem dwie linie wstawiłem jedną.
To ten commit powinien zrobić dokładnie odwrotną sytuację czyli sprawdźmy w edytorze czy mam z powrotem
dwie linie i zwróć uwagę że nie przywróciłem w wersji plików tylko wykonałem odwrotne operacje.
Czyli jeśli w jakiejś zmianie w jakimś commiecie dodawałem linie i usuwałem to te dodane linie ja z powrotem
usuwam a te usunięte z powrotem przywracam.
I w ten sposób możesz zaaplikować w swoim katalogu nie całe zmiany.
Całe nowe pliki i nie musisz całego pliku możesz wydobyć poszczególną zmianę dodanie kilku linii lub jedną modyfikację
jakąś jednostkę pracy którą wykonałeś na jakichś plikach i cofnąć ją.
Tak jakby ona się nigdy nie stała.
Nie musisz tego robić na ostatniej wersji spójrzmy tutaj git log powiedzmy 6.
Tutaj mam coś takiego jak nowa linia witaj.
Ważne zmiany.
Czyli powiedzmy że jakiś czas temu w konkretnych plikach dodaliśmy parę zmian i nie chciałbym teraz iść i
szukać dokładnie które to są pliki które w których miejscach je zmieniłem i robić tego jeszcze raz ręcznie
cofać z powrotem.
Chciałbym po prostu sprawdzić tak jakby ten commit się nigdy nie zdarzył chciałem go wycofać.
To co wprowadził ten jeden commit więc pożyczę sobie jego id jego hash.
I tym razem robię też git revert.
Tylko zwróć uwagę że podaje hash który nie jest ostatnim commitem tylko jest ileś ileś wersji wstecz.
To są konkretne zmiany.
Może jeszcze nim zrevertuje.
Zróbmy sobie show.
Jak widzisz w tym commicie została dodana ważna informacja jeśli przejdę do edytora do notatki przeczytaj to mam tutaj ważną
informację.
Powiedzmy że w wielu plikach właśnie powprowadzałem jakieś zmiany do danych czy informacje najpóźniej po
tygodniu okazuje się że to było niepotrzebne.
Nie chcę teraz szukać zmieniać tych wszystkich rzeczy.
Chciałbym jakby jednym ruchem cały ten całą tą pracę całą tą jednostkę pracy całą zmianę wycofać pomimo
że już były kolejne zmiany.
Spróbujmy.
Git revert.
Git revert i muszę przekopiować jeszcze raz ten hash
ponownie pyta mnie tutaj o komentarz ja tu mogę dopisać jeszcze revert.
I tu mogę jeszcze powiedzmy dodać dodatkową informację
ważne jednak nie były ważne
zapisze i znowu utworzony został kolejny commit.
Sprawdźmy git log i tutaj cofam ten commit jest też jego hash i powinna stać się odwrotna dokładnie operacja do
tego commitu czyli ten commit dawał ważne zmiany a ten commit je usuwa.
Gdyby ten commit np. usuwał jakieś ważne informacje i chciałbym przywrócić te wszystkie zmiany to ten revert
byłby dokładnie odwrotną operacją czyli usunięte zmiany by z powrotem przywrócił przejdźmy do pliku.
Jak widzisz plik przeczytaj to ważne informacje zniknęły.
Czyli jak widzisz git revert pozwala ci przywracać nie tylko pojedyncze pliki do ich poprzednich wersji ale pozwala
odwracać operacje które zostały wykonane dawno temu na plikach.
Nawet jeśli później te pliki były modyfikowane tutaj spróbujmy zobaczyć sobie plik witaj txt.
Mam tutaj dwie linie moglibyśmy nadal przywracać kolejne wersje i akurat przewracałem.
Więc już nie będę zmieniał.
Czy pamiętaj jeśli chcesz stworzyć commit odwrotny do jakiegoś wcześniejszego commita to możesz to
zrobić właśnie w ten sposób.
Git revert i możesz cofnąć operację zmiany wykonane wcześniej może się zdarzyć że w kolejnych commitach modyfikowałeś
te same linie i git nie będzie wiedział jak tutaj poradzi sobie z tym.
W takim przypadku git zatrzyma się i poprosi Cię o rozwiązanie konfliktu czyli poprawienie błędów w
pliku tak żeby on miał poprawną na końcu strukturę.
Ale o tym będziemy mówić w kolejnych lekcjach.
Nim do tego dojdziemy chcę pokazać jeszcze jak modyfikować historię czyli zwróć uwagę że powstało nam trochę
commitów i robi się tu taki mały bałagan.
Jeśli chciałbym mieć czystą historię chciałbym mieć porządek lub np. scommitowałem coś przez przypadek chciałbym
usunąć jakiś commit zmienić go.
To jest taka możliwość ale o tym już w kolejnej lekcji.
Do zobaczenia.