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!
Jak pamiętasz z poprzednich lekcji korzystając z polecenia git checkout mogliśmy usunąć wszystkie niezapisane
zmiany z naszego katalogu roboczego albo dokładniej mówiąc przywrócić ostatnią zapisaną wersję jednocześnie
nadpisując wszystkie niezapisane zmiany w naszym katalogu.
Dla przypomnienia ja na szybko w pliku witaj txt dodam jakieś nieistotne zmiany
git status i mam plik witaj txt który jest zmodyfikowany i jak od razu widzisz git nam podpowiada że poleceniem tutaj
git checkout dwa myślniki i ścieżka do pliku mogę pozbyć się usunąć zmiany w katalogu roboczym tak naprawdę
on nie pozbywa się zmian.
Tak jak wspomniałem wcześniej on przywraca ostatnią zapisaną wersję i nadpisuje te zmiany.
Czyli jeśli teraz zrobię git checkout i podając te dwa myślniki nie podaję po prostu z której wersji równie dobrze
mógłby być tutaj head czyli ostatni commit który jest na naszej gałęzi aktualnej master i z tego ostatniego
commita ja chcę przywrócić witaj txt sprawdźmy w edytorze jak widzisz nasze zmiany przed chwilą które
wprowadziłem zostały cofnięte te zmiany straciliśmy one nie są nigdzie zapisane natomiast mamy tu
ostatnią wersję który zapisaliśmy możemy pójść o krok dalej.
Mogę tutaj zrobić git log i zobaczmy tutaj jest notatka przeczytaj to ważne zmiany tu jest nowa linia
witaj txt.
Więc spróbujmy z tego commitu.
Czyli git checkout.
Zamiast podawać head czyli najnowsza ostatnia zmiana ja tu się cofnę i chciałbym z tego commita przywrócić
plik witaj txt.
Spróbujmy.
Jak widzisz udało mi się nie tylko cofnąć zmiany do ostatniej wersji tylko dzięki poleceniom git checkout.
Możesz wybrać sobie dowolną wersję plików historii i przywrócić go czyli nie musisz przywracać całego katalogu nie
musisz cofać wszystkich zmian.
Możesz zobaczyć korzystając z polecenia git log
korzystając z polecenia git diff określić gdzie dokładnie w którym commicie w którym momencie zmienił się
plik.
Kiedy on miał taką wersję jaka ciebie interesuje i możesz przywrócić tą wersję.
Tutaj jednak jeszcze nic się nie stało gdybyśmy dali git status to on dopiero tą wersję przywróconą nam przygotował do scommitowania.
Czy jeśli teraz nie zrobię commita.
No to wrócimy tam gdzie byliśmy czyli teraz git reset git status mam teraz to jako niezmieniony plik
i mogę zrobić to inaczej mogę pisać zupełnie nowa linia
i dopiero teraz go scommitować.
Jak widzisz gitcheckout.
Nie służy tylko do resetowania zmian.
Git checkout jest bardzo potężnym narzędziem które pozwala ci do aktualnego katalogu roboczego przywrócić
różne pliki a nawet wiele plików czy katalogi z dowolnej wersji i właśnie pobrać je do naszego aktualnego
katalogu.
Chciałbym żebyś zapamiętał że właśnie git checkout.
Nie służy do usuwania zmian git checkout służy mi jak mówi nazwa checout czyli do wydobycia wcześniejszej wersji i ustawienia
jej tutaj w naszym katalogu roboczym.
I teraz dla przykładu jeszcze stworzę jeden plik
sprawdźmy git status i mam tutaj nieśledzony plik nowy i śledzony ale zmodyfikowany plik nasz witaj txt.
Jeśli robię git.
Checkout zrobię tutaj kropkę czyli chciałbym wyczyścić wszystko to tak naprawdę jak widzisz nie wyczyściłem plików ale przywróciłem
te które miały wcześniejsze wersje.
Jeśli plik nie miał wcześniejszej wersji i plik nie był śledzony przez gita to jak widzisz nie ma jak
przywrócić tej wersji.
Jest tutaj nowy plik.
Nic się z nim nie stało on się nie zmienił jest to troszkę mylące dla osób które właśnie zapamiętują
że git checkout służy do wycofywania zmian.
Git checkout wycofuje zmiany ale tylko na plikach które były wcześniej śledzone dlatego że git checkout tak
na prawdę po prostu przywraca poprzednie wersje plików.
Domyślnie jest to plik po prostu z ostatniej wersji czy to od niego commita czy to z wersji którą mamy
zapisaną w indeksie.
Jeśli podamy wersję no to możemy z dowolnego commitu jak widziałeś po prostu git log wybrać sobie dowolną
wersję wcześniejszą pliku i przywrócić ją u nas do naszego katalogu.
Tak samo mogę zrobić git ckeckout zrobimy sobie head i tym poleceniem powiedzmy do góry możesz bezpośredniego
rodzica albo takim poleceniem na przykład tylda wcześniejsze commity w historii powiedzmy z trzy wersje do tyłu przywrócić
i przejść cały katalog notatki.
Sprawdźmy jak widzisz poprzednio modyfikowaliśmy plik notatki przeczytaj to i tutaj nam.
Powrócił z powrotem do takiej wersji w jakiej był dokładnie trzy commity temu.
Czyli jak widzisz możesz w dowolny sposób czy to pobierać katalogi czy pliki możesz podać dokładny commit.
A możesz po prostu cofnąć dany plik lub katalog kilka wersji do tyłu korzystając z polecenia git checkout.
Jeśli oczywiście tego nie scommituje tylko np. usunę tutaj nowy plik.
Natomiast git reset usunę modyfikacje i zrobię git status żeby zobaczył różnicę git status i ponownie git.
Jeśli chce przywrócić ten plik z powrotem do aktualnej wersji nie tej wcześniej tej o 3 tylko najnowszą
jaką mamy zapisaną to znowu git checkout.
Notatki git status i jesteśmy z powrotem na czystym katalogu roboczym czyli nasza aktualna wersja plików
jest w pełni zgodna z ostatnim commitem.
Czyli nie mamy żadnych zmian.
Nie mamy nic do dodania.
Jesteśmy na bieżąco z naszą gałęzią master.
Jesteśmy na czysto.
Nim przejdziemy jednak do kolejnych poleceń chciałbym żebyś zapamiętał że pliki przywrócone poleceniem
git checkout są umieszczane tutaj w katalogu roboczym albo w indeksie.
Znaczy jeśli nie scommitujesz tych zmian no to one nie trafią do naszej historii.
Czyli powiedzenie git checkout.
Podam sobie powiedzmy rewizję jeden do tyłu i podam plik witaj.
To przywróci mi tylko pojedynczy plik.
Jeśli użyjesz już samego git checkout w ten sposób to zachowasz to troszeczkę inaczej nie przywróci mi to wszystkich
plików tylko przesunie nam wskaźnik head.
I o tym będziemy jeszcze rozmawiać.
Natomiast w naszym przykładzie tutaj gdzie wracamy poszczególne pliki lub katalogi proszę pamiętać że
przywrócenie poszczególnego pliku aby te zmiany zostały zachowane w nowej historii wymaga scommitowania
i zrobimy tutaj jeszcze git.
commit
przywrócono plik witaj txt git log i teraz dopiero teraz nasz plik znalazł się w historii i tym razem jeśli
będę wykonywał polecenia git checkout.
No to jak już wiesz będziemy przywracać ostatnią wersję czyli ta która właśnie znajduje się w ostatnim commicie.
To są najważniejsze informacje o poleceniu checkout.
Jak zauważyłeś w różnych sytuacjach on zachowuje się inaczej.
Czasem ono przywraca po prostu zmiany z naszego indeksu.
Podam konkretny plik to możemy przywrócić konkretną wersję z historii.
A jak zobaczysz w kolejnych lekcjach dzięki pracy z gałęziami git checkout.
Będzie miał jeszcze jedną funkcję.
Chociaż tak naprawdę za każdym razem git checkout.
Po prostu wybiera nam poprzednią wersję pliku lub całego naszego projektu z historii.
To na tyle w kwestii git checkout w kolejnych lekcjach zobaczysz że nie tylko możesz modyfikować poszczególne
pliki ale możesz modyfikować całą historię możesz wprowadzać całe zmiany na wielu plikach jednocześnie
ale to już w kolejnych lekcjach.
Do zobaczenia.