Laboratorium: System kontroli wersji Git i platforma GitHub

Prowadzący: mgr inż. Igor Brzeżek
Dla: Studentów II roku Informatyki
Cel: Praktyczne opanowanie najpopularniejszego systemu kontroli wersji na świecie.

Zadanie 1 Zakładanie konta na platformie GitHub
Cel: Utworzenie profesjonalnego profilu na platformie GitHub, który stanie się wizytówką programisty w środowisku IT.
Czego się nauczysz: Rejestracji w serwisie, wdrażania podstawowych mechanizmów bezpieczeństwa (2FA) oraz znaczenia profesjonalnej nazwy użytkownika w branży technologicznej.
Scenariusz: Wchodzisz w świat otwartoźródłowego oprogramowania (Open Source). Twoim pierwszym krokiem jest stworzenie profesjonalnej tożsamości cyfrowej. Wyobraź sobie, że nazywasz się Jan Nowak (na potrzeby ćwiczenia użyjemy adresu jnowak@gmail.com). Twoim celem jest założenie konta, które będziesz mógł dumnie prezentować w CV. Nie traktuj tego jak zwykłego konta społecznościowego – to Twoje inżynierskie portfolio.
Instrukcja wykonania:
  1. Otwórz przeglądarkę internetową i przejdź na stronę github.com.
  2. W prawym górnym rogu kliknij przycisk Sign up (Zarejestruj się).
  3. W polu "Enter your email" wpisz swój adres e-mail (w naszym ćwiczeniu: jnowak@gmail.com - Ty użyj swojego prawdziwego adresu) i kliknij Continue.
  4. Stwórz silne hasło (minimum 15 znaków lub przynajmniej 8 znaków zawierających cyfrę i małą literę). Pamiętaj, to bezpieczny schowek na Twój kod!
  5. Zdefiniuj unikalną nazwę użytkownika (username). Wskazówka: Unikaj nieprofesjonalnych nazw typu "killer123". Zdecydowanie lepiej użyć kombinacji imienia i nazwiska, np. jnowak_dev.
  6. Rozwiąż prostą zagadkę weryfikacyjną (sprawdzenie, że nie jesteś botem).
  7. Po zakończeniu rejestracji GitHub wyśle Ci e-mail weryfikacyjny. Kliknij w link w tym e-mailu, aby aktywować konto.
    Uwaga: Jeśli nie widzisz e-maila, sprawdź folder SPAM lub ponownie wyślij kod weryfikacyjny z ustawień konta (Settings → Emails → Resend verification email).
  8. Po zalogowaniu, w prawym górnym rogu kliknij swój awatar i wybierz Settings (Ustawienia) → Public profile (Profil publiczny). Uzupełnij pole "Bio" (np. "Student Informatyki pasjonujący się językami C i Python"). To jedna z pierwszych rzeczy, na które zwracają uwagę rekruterzy!
  9. Zalecane: Włącz dwuskładnikowe uwierzytelnianie (2FA) w Settings → Password and authentication dla dodatkowego bezpieczeństwa.
Zadanie 2 Interfejs GitHub i instalacja Git CLI
Cel: Zrozumienie kluczowych elementów interfejsu GitHub oraz przygotowanie lokalnego środowiska pracy (Windows/Linux) do obsługi systemu Git z poziomu terminala.
Czego się nauczysz: Rozróżniania repozytorium od projektu, instalacji narzędzi linii poleceń (CLI), konfiguracji tożsamości w systemie Git (user.email, user.name).
Scenariusz: Posiadasz już konto, ale GitHub to nie tylko strona WWW. Prawdziwa efektywność tkwi w wierszu poleceń. Musisz zainstalować "silnik" systemu kontroli wersji Git na swoim komputerze. Przy okazji dowiesz się, czym różnią się "Repositories" (repozytoria – miejsca przechowywania kodu) od "Projects" (projekty – tablice Kanban do zarządzania zadaniami). Następnie "przedstawisz się" Gitowi, aby każda Twoja zmiana była poprawnie podpisana Twoimi danymi.
Instrukcja wykonania:
  1. Zaloguj się na GitHub i kliknij ikonę "+" w górnym pasku. Zauważ różnicę między: New repository (nowe repozytorium kodu – to nas interesuje) a New project (nowy projekt – narzędzie do planowania prac, podobne do Trello). Zapamiętaj to rozróżnienie.
  2. Instalacja w systemie Windows: Pobierz instalator ze strony git-scm.com. Przejdź przez proces instalacji z domyślnymi ustawieniami. W kroku dotyczącym domyślnego edytora możesz zmienić Vim na Notepad++, VS Code lub inny preferowany program.
  3. Instalacja w systemie Linux (Debian/Ubuntu): Otwórz terminal i wykonaj polecenia: sudo apt-get update && sudo apt-get install git.
  4. Instalacja w systemie macOS: Jeśli masz zainstalowany Homebrew, użyj: brew install git. W przeciwnym razie Git jest domyślnie zainstalowany.
  5. Uruchom terminal (w Windows: Menu Start → wpisz "Git Bash" lub "CMD", w Linux/macOS: dowolny terminal).
  6. Zweryfikuj poprawność instalacji, sprawdzając wersję programu:
    $ git --version git version 2.43.0
  7. Skonfiguruj swoją globalną tożsamość (dane te będą dołączane do każdego zatwierdzenia zmian – tzw. commita):
    # Konfiguracja nazwy użytkownika (Imię i Nazwisko) $ git config --global user.name "Jan Nowak" # Konfiguracja adresu e-mail (musi być identyczny z tym na GitHubie!) $ git config --global user.email "jnowak@gmail.com" # Weryfikacja bieżącej konfiguracji $ git config --list user.name=Jan Nowak user.email=jnowak@gmail.com ...
Zadanie 3 Publikacja projektu "acopy" przez interfejs WWW
Cel: Utworzenie pierwszego repozytorium i wgranie plików projektu w języku C z wykorzystaniem wyłącznie przeglądarki internetowej.
Czego się nauczysz: Tworzenia repozytorium, dodawania pliku dokumentacji (README.md), wyboru odpowiedniej licencji oraz zrozumienia podstawowej struktury plików w repozytorium.
Scenariusz: W folderze d:\dane\acopy przechowujesz swój projekt napisany w C – program do kopiowania plików. Składa się on z plików źródłowych .c oraz nagłówkowych .h. Chcesz udostępnić go publicznie, ale na razie wolisz uniknąć korzystania z konsoli. Wykonasz to za pomocą interfejsu graficznego GitHub. Pamiętaj, że profesjonalny projekt powinien zawierać plik README.md (instrukcję/opis) oraz licencję określającą zasady korzystania z kodu.
Instrukcja wykonania:
  1. Na stronie głównej GitHub kliknij zielony przycisk New (Nowe) lub "Create repository".
  2. W polu Repository name wprowadź: acopy.
  3. W polu Description wpisz: "Prosty program do kopiowania plików napisany w standardzie ANSI C".
  4. Wybierz widoczność: Public (publiczne – każdy może zobaczyć kod) lub Private (prywatne). Na potrzeby ćwiczenia wybierz Public.
  5. Zaznacz opcję Add a README file. Spowoduje to utworzenie startowego pliku opisu.
  6. W sekcji Choose a license wybierz np. MIT License (jedna z najpopularniejszych otwartoźródłowych licencji).
  7. Zatwierdź klikając Create repository.
  8. Jesteś teraz na stronie swojego repozytorium. Kliknij przycisk Add fileUpload files.
  9. Przeciągnij pliki z katalogu d:\dane\acopy (źródła .c, nagłówki .h) bezpośrednio w obszar na stronie.
  10. W polu "Commit changes" (Zatwierdź zmiany) wpisz krótki opis: "Dodanie kodów źródłowych projektu".
  11. Kliknij zielony przycisk Commit changes. Twoje pliki zostały bezpiecznie umieszczone w chmurze!
Zadanie 4 Obsługa wiersza poleceń: Inicjalizacja projektu "csvmover"
Cel: Przesłanie projektu Python z dysku lokalnego na platformę GitHub z wykorzystaniem wyłącznie terminala (Git Bash / CMD).
Czego się nauczysz: Inicjalizacji repozytorium (git init), podłączania zdalnego repozytorium (git remote), rejestrowania plików w obszarze przejściowym (git add), zatwierdzania zmian (git commit) i ich wysyłania (git push).
Scenariusz: Jako profesjonalny programista pracujesz nad projektem w d:\dane\csvmover (skrypty w języku Python). Przy rozbudowanych projektach obsługa przez przeglądarkę staje się nieefektywna, dlatego skorzystamy z konsoli. Najpierw utworzysz puste repozytorium na stronie GitHub, a następnie "wypchniesz" do niego swój lokalny kod. Jest to standardowy model pracy w branży IT.
Instrukcja wykonania:
  1. Na GitHubie utwórz nowe repozytorium o nazwie csvmover. WAŻNE: tym razem nie zaznaczaj opcji "Add a README" ani nie wybieraj licencji. Potrzebujemy całkowicie pustego repozytorium.
  2. Po utworzeniu zobaczysz stronę z instrukcją. Skopiuj widoczny tam adres HTTPS, np.: https://github.com/JanNowak/csvmover.git.
  3. Otwórz terminal i przejdź do katalogu projektu:
    $ cd ~/dane/csvmover
  4. Zainicjuj system Git w katalogu, zarejestruj pliki, wykonaj pierwszy commit i wyślij zmiany na serwer:
    # 1. Inicjalizacja lokalnego repozytorium w bieżącym katalogu $ git init Initialized empty Git repository in ~/dane/csvmover/.git/ # 2. Dodanie wszystkich plików do obszaru przejściowego (stage) $ git add . # 3. Zatwierdzenie zmian (utworzenie "migawki" wersji 0.0.1) $ git commit -m "Inicjalizacja projektu v0.0.1 - bazowe skrypty" [master (root-commit) a1b2c3d] Inicjalizacja projektu v0.0.1 - bazowe skrypty 3 files changed, 150 insertions(+) # 4. Zmiana nazwy domyślnej gałęzi na 'main' (aktualny standard GitHub) $ git branch -M main # 5. Podłączenie adresu zdalnego repozytorium $ git remote add origin https://github.com/JanNowak/csvmover.git # 6. Wypchnięcie zmian do zdalnego repozytorium $ git push -u origin main Enumerating objects: 5, done. ... To https://github.com/JanNowak/csvmover.git * [new branch] main -> main
Zadanie 5 Modyfikacja kodu, wersjonowanie i etykiety (Tagi)
Cel: Wprowadzenie zmian w kodzie, aktualizacja repozytorium oraz stosowanie profesjonalnego znakowania wersji za pomocą tagów.
Czego się nauczysz: Standardowego cyklu pracy: edycja → add → commit → push. Wykorzystania polecenia git tag do oznaczania konkretnych wydali (tzw. release) oraz zrozumienia różnicy między zwykłym zatwierdzeniem (commit) a etykietą (tag).
Scenariusz: Twój projekt csvmover rozwija się. Wprowadziłeś nową funkcjonalność w pliku main.py (np. obsługę wyjątków). To istotny krok, który chcesz oznaczyć jako wersja 0.0.2. Musisz zaktualizować kod na GitHubie oraz trwale oznaczyć etykietą "v0.0.2". Dzięki temu użytkownicy będą mogli łatwo pobrać tę konkretną, stabilną wersję, zamiast korzystać z najnowszego, potencjalnie niestabilnego kodu.
Instrukcja wykonania:
  1. Otwórz plik main.py w edytorze kodu, dopisz komentarz lub zmień fragment logiki i zapisz plik.
  2. W terminalu sprawdź status zmian:
    $ git status On branch main Changes not staged for commit: modified: main.py
  3. Zatwierdź zmiany i wyślij je do zdalnego repozytorium:
    $ git add main.py $ git commit -m "Poprawki błędów i aktualizacja do wersji 0.0.2" $ git push
  4. Teraz dodaj etykietę (Tag) wersji:
    # Utworzenie tag v0.0.2 (etykieta z opisem) $ git tag -a v0.0.2 -m "Wydanie wersji stabilnej 0.0.2" # Wysłanie tagów na serwer (ważne: git push domyślnie nie wysyła tagów!) $ git push origin v0.0.2 To https://github.com/JanNowak/csvmover.git * [new tag] v0.0.2 -> v0.0.2
  5. Przejdź na stronę projektu na GitHubie do zakładki Releases lub Tags. Zobaczysz tam swoją wersję v0.0.2 dostępną do pobrania jako archiwum ZIP lub TAR.GZ.
Zadanie 6 Praca na gałęziach (Branches) – bezpieczne eksperymentowanie
Cel: Nauka izolowania prac nad nowymi funkcjami, co pozwala na rozwijanie projektu bez ryzyka uszkodzenia głównej, stabilnej linii kodu.
Czego się nauczysz: Tworzenia nowej gałęzi (branch), przełączania się między kontekstami pracy (checkout/switch) oraz scalania zmian z powrotem do głównej gałęzi (merge).
Scenariusz: Planujesz dodać eksperymentalną funkcję "turbo-speed" do projektu csvmover, ale obawiasz się, że zmiany mogą zdestabilizować działający program. Rozwiązanie: stwórz boczną gałąź o nazwie eksperyment. Jeśli funkcja zadziała poprawnie – scalasz ją z gałęzią główną (main). Jeśli okaże się porażką – po prostu ją usuwasz, a main pozostaje nienaruszony.
Instrukcja wykonania:
  1. Sprawdź, na której gałęzi aktualnie się znajdujesz:
    $ git branch * main
  2. Utwórz nową gałąź i przełącz się na nią. Dostępne są dwie metody:
    # Metoda 1: checkout (tradycyjna, starsza składnia) $ git checkout -b eksperyment Switched to a new branch 'eksperyment'
    # Metoda 2: switch (nowsza, bardziej intuicyjna składnia - REKOMENDOWANA) $ git switch -c eksperyment Switched to a new branch 'eksperyment'
  3. Stwórz nowy plik turbo.py. Dodaj go i wykonaj zatwierdzenie (commit).
    $ git add turbo.py $ git commit -m "Dodanie eksperymentalnego modułu turbo"
  4. Wróć na gałąź główną. Zauważ, że plik turbo.py "zniknie" z katalogu na dysku (ponieważ istnieje tylko w gałęzi eksperymentalnej):
    $ git checkout main # lub używając nowszej składni: $ git switch main
  5. Uznajemy, że eksperyment jest udany. Scal (merge) zmiany z gałęzi eksperyment do main:
    $ git merge eksperyment Updating a1b2c..d4e5f Fast-forward turbo.py | 1 + 1 file changed, 1 insertion(+)
  6. Wyślij zaktualizowaną gałąź główną do zdalnego repozytorium:
    $ git push
Zadanie 7 GitHub Pages – hostowanie Twojej strony wizytówki
Cel: Uruchomienie bezpłatnego hostingu statycznej strony internetowej bezpośrednio z plików Twojego repozytorium.
Czego się nauczysz: Konfiguracji usługi GitHub Pages oraz publikacji plików statycznych (HTML/CSS/obrazy).
Scenariusz: W projekcie acopy posiadasz dokumentację w pliku art.html oraz powiązane obrazy. Chcesz, aby pod publicznym adresem WWW (np. jannowak.github.io/acopy) każdy mógł zapoznać się z dokumentacją w formie wyrenderowanej strony, a nie jedynie przeglądać kod źródłowy plików.
Instrukcja wykonania:
  1. Otwórz repozytorium acopy na platformie GitHub.
  2. Upewnij się, że posiadasz tam plik tekstowy o nazwie index.html. Jeśli Twój plik nazywa się inaczej (np. art.html), zmień jego nazwę na index.html (GitHub domyślnie szuka tego pliku jako strony startowej).
  3. Przejdź do zakładki Settings (Ustawienia – ikona koła zębatego w górnym menu).
  4. W menu po lewej stronie wybierz sekcję Pages (znajduje się w sekcji "Code and automation").
  5. W części "Build and deployment" pod nagłówkiem "Source" masz dwie opcje:
    • Deploy from a branch – publikacja z wybranej gałęzi (prostsza, polecana dla początkujących)
    • GitHub Actions – publikacja za pomocą automatycznego workflow (bardziej zaawansowana)
  6. Dla opcji "Deploy from a branch":
    • W polu "Branch" wybierz gałąź main oraz folder /(root).
    • Kliknij Save.
  7. Odczekaj około 1-2 minut, a następnie odśwież stronę. Zobaczysz komunikat: "Your site is live at..." wraz z wygenerowanym linkiem.
  8. Kliknij wygenerowany link. Twoja profesjonalna dokumentacja jest już dostępna dla całego świata!
    Ważne: Adres strony będzie miał format: twojusername.github.io/nazwa-repozytorium. Jeśli chcesz, aby strona była dostępna pod twojusername.github.io, nazwij repozytorium dokładnie twojusername.github.io (tworząc tzw. user site).
Zadanie 8 Zarządzanie repozytorium: Zmiana nazwy i usuwanie projektów
Cel: Poznanie czynności administracyjnych: jak zmienić nazwę projektu oraz jak bezpiecznie go usunąć.
Czego się nauczysz: Zmiany nazwy repozytorium (oraz zrozumienia konsekwencji dla zdalnych adresów URL), archiwizacji oraz trwałego usuwania projektów.
Scenariusz: Nazwa csvmover przestała Ci odpowiadać – postanawiasz zmienić ją na bardziej profesjonalną: PyDataMover. Z kolei projekt acopy uznajesz za zakończony test i chcesz go skasować, aby zachować porządek na swoim profilu. Pamiętaj: operacja usunięcia jest nieodwracalna!
Instrukcja wykonania:
  1. Zmiana nazwy: Otwórz repozytorium csvmover i przejdź do Settings. Na samej górze, w polu "Repository name", wprowadź PyDataMover i kliknij Rename.
    Uwaga: Od tego momentu adres URL repozytorium uległ zmianie. Choć GitHub oferuje automatyczne przekierowania, dobrą praktyką jest zaktualizowanie adresu w lokalnej konfiguracji:
    $ git remote set-url origin https://github.com/JanNowak/PyDataMover.git
  2. Usuwanie repozytorium: Otwórz repozytorium acopy i przejdź do Settings. Zjedź na sam dół do sekcji oznaczonej jako Danger Zone (Strefa niebezpieczeństwa).
  3. Kliknij przycisk Delete this repository.
  4. GitHub ze względów bezpieczeństwa poprosi Cię o ręczne przepisanie pełnej nazwy repozytorium (np. JanNowak/acopy). Dopiero po tym potwierdzeniu projekt zostanie bezpowrotnie usunięty.
    OSTRZEŻENIE: Usunięcie repozytorium jest trwałe i nie można cofnąć tej operacji. Przed usunięciem upewnij się, że masz lokalną kopię wszystkich potrzebnych plików.
Zadanie 9 Social Coding: Śledzenie projektów i Forkowanie
Cel: Zrozumienie społecznościowego aspektu platformy GitHub: śledzenie twórców, docenianie ich pracy (gwiazdki) oraz kopiowanie projektów (Fork).
Czego się nauczysz: Mechanizmu forkowania (tworzenia własnej kopii czyjegoś projektu), korzystania z opcji Watch/Star oraz wyszukiwania użytkowników.
Scenariusz: Chcesz stać się aktywnym członkiem społeczności. Znajdź profil użytkownika igorbrzezek. Spodobało Ci się jedno z jego repozytoriów. Twoim celem jest pobranie tego projektu na swoje konto (tzw. Fork), aby móc go dowolnie modyfikować bez wpływu na oryginał.
Instrukcja wykonania:
  1. W pasku wyszukiwania na górze strony wpisz igorbrzezek i przejdź do profilu autora.
  2. Kliknij przycisk Follow (Obserwuj), aby śledzić publiczną aktywność tej osoby.
  3. Otwórz dowolne publiczne repozytorium tego użytkownika.
  4. Zwróć uwagę na trzy przyciski w prawym górnym rogu strony repozytorium:
    • Watch (Obserwuj): Kliknij, jeśli chcesz otrzymywać powiadomienia o nowych zmianach w tym projekcie.
    • Star (Gwiazdka): To odpowiednik "polubienia". Gwiazdki budują renomę projektu i jego autora.
    • Fork (Rozwidlenie): To kluczowa funkcja. Kliknięcie Fork utworzy identyczną KOPIĘ projektu na TWOIM koncie (jako JanNowak/nazwa-projektu). Od tej pory posiadasz pełne prawa do tej kopii i możesz w niej swobodnie eksperymentować.
  5. Po sforkowaniu możesz clone'ować to repozytorium na swój komputer i wprowadzać własne zmiany.
  6. Jeśli chcesz, aby Twoje zmiany zostały włączone do oryginalnego projektu, możesz utworzyć Pull Request.
Zadanie 10 Dobry nawyk – ignorowanie zbędnych plików (.gitignore)
Cel: Skonfigurowanie systemu Git w taki sposób, aby automatycznie pomijał pliki tymczasowe, binarne i inne zbędne elementy (np. skompilowane pliki .exe, biblioteki, cache).
Czego się nauczysz: Tworzenia i edycji pliku .gitignore oraz zrozumienia znaczenia utrzymywania "czystego" repozytorium (przechowujemy kod źródłowy, nie pliki wynikowe).
Scenariusz: Podczas pracy z Pythonem automatycznie generowany jest katalog __pycache__. W przypadku języka C powstają pliki .exe lub .o. Nie chcemy ich przesyłać na GitHub, ponieważ zajmują miejsce i są specyficzne dla danego komputera. Repozytorium powinno być sterylne. Stworzysz plik-instrukcję, który wskaże Gitowi, jakie elementy ma ignorować.
Instrukcja wykonania:
  1. W głównym katalogu projektu PyDataMover utwórz plik tekstowy o nazwie .gitignore (pamiętaj o kropce na samym początku nazwy).
  2. Otwórz go w dowolnym edytorze tekstowym i zdefiniuj reguły ignorowania:
    # Ignoruj katalogi cache Pythona __pycache__/ *.pyc # Ignoruj pliki wykonywalne i biblioteki (Windows) *.exe *.dll *.obj *.o # Ignoruj pliki tymczasowe logów *.log # Ignoruj katalogi środowisk wirtualnych venv/ env/ .venv/
  3. Zapisz plik. Wykonaj git status. Nawet jeśli w katalogu znajduje się plik program.exe, Git pominie go w sekcji "Untracked files".
  4. Zatwierdź i wyślij plik konfiguracji:
    $ git add .gitignore $ git commit -m "Dodanie definicji ignorowanych plików (.gitignore)" $ git push
  5. Wskazówka: Dla popularnych języków i frameworków możesz skorzystać z gotowych szablonów .gitignore na stronie github.com/github/gitignore.
Zadanie 11 Rozwiązywanie konfliktów edycji
Cel: Zrozumienie mechanizmu powstawania konfliktów, gdy dwie osoby (lub Ty sam w różnych miejscach) zmodyfikują tę samą linię kodu jednocześnie.
Czego się nauczysz: Obsługi błędu "rejected push", wymuszania pobrania zmian serwerowych (git pull) oraz ręcznego rozstrzygania różnic w plikach.
Scenariusz: To klasyczna sytuacja w pracy zespołowej. Zmodyfikowałeś plik lokalnie na swoim komputerze. W tym samym czasie ktoś inny (lub Ty za pomocą edytora WWW) zmienił tę samą linię pliku na serwerze. Podczas próby wysłania (push) otrzymasz błąd. Musisz nauczyć się, jak pogodzić te dwie wersje.
Instrukcja wykonania:
  1. Przejdź na stronę GitHub do swojego repozytorium PyDataMover.
  2. Zredaguj plik main.py bezpośrednio przez stronę WWW (ikona ołówka). Zmień pierwszą linię na: # Wersja zmodyfikowana na SERWERZE i zatwierdź zmiany (Commit).
  3. Teraz w lokalnym edytorze na komputerze otwórz ten sam plik main.py. Zmień tę samą, pierwszą linię na: # Wersja zmodyfikowana LOKALNIE. Zapisz plik.
  4. Spróbuj wysłać lokalną zmianę na serwer:
    $ git add main.py $ git commit -m "Moja lokalna zmiana" $ git push ! [rejected] main -> main (fetch first) error: failed to push some refs to...
  5. Git informuje, że na serwerze istnieją nowsze zmiany, których nie masz u siebie. Musisz je najpierw pobrać:
    $ git pull CONFLICT (content): Merge conflict in main.py Automatic merge failed; fix conflicts and then commit the result.
  6. Otwórz plik main.py w edytorze. Zobaczysz specjalne znaczniki konfliktu:
    <<<<<<< HEAD
    # Wersja zmodyfikowana LOKALNIE
    =======
    # Wersja zmodyfikowana na SERWERZE
    >>>>>>> abc1234def...
  7. Usuń znaczniki (<<<, ====, >>>>) i wybierz tę wersję, która jest poprawna (lub połącz obie w logiczny sposób). Zapisz plik.
  8. Dokończ proces scalania (tzw. "merge commit"):
    $ git add main.py $ git commit -m "Ręczne rozwiązanie konfliktu w pliku main.py" $ git push
  9. Git informuje, że na serwerze istnieją nowsze zmiany, których nie masz u siebie. Musisz je najpierw pobrać:
    $ git pull CONFLICT (content): Merge conflict in main.py Automatic merge failed; fix conflicts and then commit the result.
  10. Otwórz plik main.py w edytorze. Zobaczysz specjalne znaczniki konfliktu:
    <<<<<<< HEAD
    # Wersja zmodyfikowana LOKALNIE
    =======
    # Wersja zmodyfikowana na SERWERZE
    >>>>>>> abc1234def...
  11. Usuń znaczniki (<<<, ====, >>>>) i wybierz tę wersję, która jest poprawna (lub połącz obie w logiczny sposób). Zapisz plik.
  12. Dokończ proces scalania (tzw. "merge commit"):
    $ git add main.py $ git commit -m "Ręczne rozwiązanie konfliktu w pliku main.py" $ git push
  13. Otwórz plik main.py w edytorze. Zobaczysz specjalne znaczniki konfliktu:
    <<<<<<< HEAD
    # Wersja zmodyfikowana LOKALNIE
    =======
    # Wersja zmodyfikowana na SERWERZE
    >>>>>>> abc1234def...
  14. Usuń znaczniki (<<<, ====, >>>) i wybierz tę wersję, która jest poprawna (lub połącz obie w logiczny sposób). Zapisz plik.
  15. Dokończ proces scalania (tzw. "merge commit"):
    $ git add main.py $ git commit -m "Ręczne rozwiązanie konfliktu w pliku main.py" $ git push
  16. Gratulacje! Właśnie rozwiązałeś swój pierwszy konflikt w systemie kontroli wersji.
Złote zasady i porady eksperta

Jako inżynier z wieloletnim doświadczeniem, dzielę się z Tobą kilkoma kluczowymi zasadami, które ułatwią Ci życie w każdym projekcie: