Wprowadzenie
Na dzisiejszych zajęciach zajmiemy się zaawansowanymi operacjami w Git, takimi jak fork, squash i cherry-pick. Omówimy również podstawy języka Markdown, który jest powszechnie używany do tworzenia plików README i dokumentacji w projektach.
Fork
Fork to kopia istniejącego repozytorium, która pozwala na niezależne rozwijanie kodu bez wpływu na oryginalne repozytorium. Fork jest tworzony na Twoim koncie GitHub i dziedziczy historię oraz ustawienia widoczności oryginalnego repozytorium.
Aby wykonać fork:
- Zaloguj się na swoje konto GitHub.
- Przejdź do strony głównej repozytorium, które chcesz zforkować.
- Kliknij przycisk Fork w prawym górnym rogu strony.
- Wybierz swoje konto jako miejsce docelowe.
Po wykonaniu forka będziesz mieć pełną kopię repozytorium na swoim koncie, gdzie możesz wprowadzać zmiany niezależnie od oryginału.
Markdown
Markdown to lekki język znaczników przeznaczony do formatowania tekstu w prosty sposób. Jest powszechnie używany do tworzenia plików README, dokumentacji i komentarzy na platformach takich jak GitHub.
Podstawowe elementy składni Markdown:
Nagłówki: używamy
#
dla oznaczenia poziomu nagłówka.1 2
# Nagłówek poziomu 1 ## Nagłówek poziomu 2
Listy: używamy
-
dla list nienumerowanych lub1.
dla list numerowanych.1 2 3 4 5
- Element listy - Kolejny element 1. Pierwszy punkt 2. Drugi punkt
Obrazy: wstawiamy za pomocą

.1

Kod: fragmenty kodu umieszczamy w znacznikach backtick
`
.1
`fragment kodu`
Więcej informacji na temat składni Markdown znajdziesz w Markdown Guide.
Squash
Squash to proces łączenia wielu commitów w jeden. Pozwala to na uproszczenie historii commitów przed udostępnieniem kodu innym członkom zespołu. Squashowanie commitów oznacza, że bierzesz zmiany z kilku commitów i scalasz je w jeden, co sprawia, że historia jest bardziej przejrzysta.
Jak wykonać squash za pomocą git rebase -i
?
Sprawdź historię commitów:
1
git log --oneline
Przykładowy wynik:
1 2 3 4 5
a1b2c3d Dodanie linku do GitHuba e4f5g6h Dodanie obrazu z kotem i7j8k9l Dodanie listy hobby m0n1o2p Krótki opis o sobie q3r4s5t Inicjalny commit
Uruchom interaktywne rebase:
Aby zesquashować ostatnie 3 commity w jeden, uruchom:
1
git rebase -i HEAD~4
Spowoduje to otwarcie edytora (domyślnie VIM) z listą ostatnich commitów:
1 2 3 4
pick m0n1o2p Krótki opis o sobie pick i7j8k9l Dodanie listy hobby pick e4f5g6h Dodanie obrazu z kotem pick a1b2c3d Dodanie linku do GitHuba
Edytuj listę commitów:
- Naciśnij
i
, aby przejść w tryb edycji. - Zmień słowa
pick
nasquash
(lub skrótowos
) przy commitach, które chcesz zesquashować z pierwszym.
Powinno to wyglądać tak:
1 2 3 4
pick m0n1o2p Krótki opis o sobie squash i7j8k9l Dodanie listy hobby squash e4f5g6h Dodanie obrazu z kotem squash a1b2c3d Dodanie linku do GitHuba
- Naciśnij
Zapisz i zamknij edytor:
- Naciśnij
Esc
, aby wyjść z trybu edycji. - Wpisz
:wq
i naciśnijEnter
, aby zapisać i zamknąć edytor.
- Naciśnij
Edytuj wiadomość commita:
Po zapisaniu pojawi się nowy ekran w edytorze, gdzie możesz edytować wiadomość wynikowego commita.
Przykładowa treść:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# This is a combination of 4 commits. # The first commit's message is: Krótki opis o sobie # This is the 2nd commit message: Dodanie listy hobby # This is the 3rd commit message: Dodanie obrazu z kotem # This is the 4th commit message: Dodanie linku do GitHuba # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit.
- Naciśnij
i
, aby edytować. - Usuń niepotrzebne wiadomości lub połącz je w jedną sensowną.
Przykład po edycji:
1
squashed commits <twój numer indeksu> - added AboutMe.md file
Zastępując
<twój numer indeksu>
swoim numerem, np.:1
squashed commits 12345 - added AboutMe.md file
- Naciśnij
Zapisz i zamknij edytor:
- Naciśnij
Esc
, aby wyjść z trybu edycji. - Wpisz
:wq
i naciśnijEnter
.
- Naciśnij
Sprawdź wynik:
Wyświetl historię commitów:
1
git log --oneline
Powinieneś zobaczyć, że ostatnie commity zostały połączone w jeden.
Przykładowy wynik:
1 2
z9y8x7w squashed commits 12345 - added AboutMe.md file q3r4s5t Inicjalny commit
Cherry-pick
Cherry-pick to operacja pozwalająca na wybranie konkretnego commita z jednej gałęzi i zastosowanie go w innej gałęzi. Jest to przydatne, gdy chcemy przenieść pojedyncze zmiany bez łączenia całych gałęzi.
Jak wykonać cherry-pick?
Zidentyfikuj commit do przeniesienia:
Przejdź na gałąź, z której chcesz wziąć commit (np.
main
):1
git checkout main
Wyświetl historię commitów:
1
git log --oneline
Przykładowy wynik:
1 2 3
abcdef1 Dodanie znaku specjalnego do AboutMe.md z9y8x7w squashed commits 12345 - added AboutMe.md file q3r4s5t Inicjalny commit
Skopiuj identyfikator (hash) commita, który chcesz przenieść (
abcdef1
).
Przejdź na gałąź docelową:
1
git checkout feature/<twój_numer_indeksu>/cherrypick
Wykonaj cherry-pick:
1
git cherry-pick abcdef1
- Jeśli nie ma konfliktów, commit zostanie dodany do Twojej gałęzi.
Jeśli wystąpią konflikty, Git poinformuje Cię o tym:
1 2 3 4 5 6
error: could not apply abcdef1... Dodanie znaku specjalnego do AboutMe.md hint: Resolve all conflicts manually, mark them as resolved with hint: "git add/rm <conflicted_files>", then run "git cherry-pick --continue". hint: You can instead skip this commit: run "git cherry-pick --skip". hint: To abort and get back to the state before "git cherry-pick", hint: run "git cherry-pick --abort".
Rozwiąż konflikty (jeśli wystąpiły):
- Edytuj pliki z konfliktami, usuń znaczniki konfliktu i wprowadź odpowiednie zmiany.
Dodaj zmodyfikowane pliki:
1
git add <plik>
Kontynuuj cherry-pick:
1
git cherry-pick --continue
Sprawdź wynik:
Wyświetl historię commitów:
1
git log --oneline
Powinieneś zobaczyć, że commit został dodany do Twojej gałęzi.
Zadania
Wykonaj forka bieżącego repozytorium do swojego konta na GitHubie.
Sklonuj repozytorium na lokalną maszynę:
1 2
git clone https://github.com/twoj-login/nazwa-repozytorium.git cd nazwa-repozytorium
Utwórz nową gałąź:
1
git checkout -b feature/<twój_numer_indeksu>/markdown
Przykład:
1
git checkout -b feature/12345/markdown
Stwórz plik
AboutMe.md
i uzupełnij go.- Przed rozpoczęciem, przejrzyj składnię pliku
README.md
w repozytorium. Plik
AboutMe.md
powinien zawierać następujące sekcje (każdy z podpunktów wykonaj jako osobny commit):a) Krótki opis przedstawiający, kim jesteś.
b) Lista Twoich hobby.
c) Obraz z kotem.
d) Link do Twojego profilu GitHub.
- Przed rozpoczęciem, przejrzyj składnię pliku
Dokument powinien być odpowiednio sformatowany:
- Każdy z punktów powinien mieć swój własny nagłówek (
#
lub##
). - Lista z hobby powinna być stworzona jako lista wypunktowana.
- Obrazek powinien być linkiem do obrazka kota z internetu.
- Link do GitHuba powinien być sformatowany jako fragment kodu (użyj backticków
`
).
- Każdy z punktów powinien mieć swój własny nagłówek (
Commituj zmiany po każdym podpunkcie:
Przykład dla pierwszego podpunktu:
1 2
git add AboutMe.md git commit -m "Dodanie krótkiego opisu o sobie"
Wykonaj squash commitów:
Zesquashuj ostatnie trzy commity w jeden za pomocą komendy:
1
git rebase -i HEAD~4
Pojawi się lista ostatnich commitów w edytorze:
1 2 3 4
pick m0n1o2p Krótki opis o sobie pick i7j8k9l Dodanie listy hobby pick e4f5g6h Dodanie obrazu z kotem pick a1b2c3d Dodanie linku do GitHuba
Zmień
pick
nasquash
przy commitach, które chcesz połączyć:1 2 3 4
pick m0n1o2p Krótki opis o sobie squash i7j8k9l Dodanie listy hobby squash e4f5g6h Dodanie obrazu z kotem squash a1b2c3d Dodanie linku do GitHuba
Zapisz i zamknij edytor (
:wq
).Edytuj wiadomość commita, ustawiając ją na:
1
squashed commits <twój numer indeksu> - added AboutMe.md file
Przykład:
1
squashed commits 12345 - added AboutMe.md file
Zapisz i zamknij edytor.
Wypchnij zmiany na zdalne repozytorium:
Ponieważ historia została zmieniona, użyj opcji
--force
:1
git push origin feature/12345/markdown --force
Stwórz Pull Request i poproś prowadzącego o weryfikację.
- Po akceptacji, zmerguj Pull Request.
Utwórz nową gałąź
feature/<twój_numer_indeksu>/gui
:1 2
git checkout main git checkout -b feature/<twój_numer_indeksu>/gui
Utwórz nową gałąź
feature/<twój_numer_indeksu>/cherrypick
:1 2
git checkout main git checkout -b feature/<twój_numer_indeksu>/cherrypick
Wróć do gałęzi
main
i w plikuAboutMe.md
dodaj jeden znak specjalny do pierwszej linijki.- Na przykład, dodaj
*
na początku pierwszej linijki. Zacommituj i wypchnij zmiany:
1 2 3
git add AboutMe.md git commit -m "Dodanie znaku specjalnego do AboutMe.md" git push origin main
- Na przykład, dodaj
Przejdź na gałąź
feature/<twój_numer_indeksu>/gui
:1
git checkout feature/<twój_numer_indeksu>/gui
Używając graficznego interfejsu użytkownika (GUI) do Gita:
- Otwórz repozytorium w wybranym narzędziu (np. IntelliJ IDEA, Visual Studio Code, SourceTree).
- W pliku
AboutMe.md
dodaj zdanie “lorem ipsum” w pierwszej linijce. - Zacommituj i wypchnij zmiany za pomocą GUI.
Wykonaj rebase gałęzi
feature/<twój_numer_indeksu>/gui
z gałęziąmain
:- Użyj funkcji rebase w GUI.
- Podczas rebase mogą wystąpić konflikty.
Rozwiąż konflikty, np.:
- W pliku
AboutMe.md
zdecyduj, czy zachować dodany znak specjalny, czy zdanie “lorem ipsum”, czy oba. - Zapisz plik po rozwiązaniu konfliktu.
- Kontynuuj rebase.
- W pliku
- Wypchnij zaktualizowaną gałąź na zdalne repozytorium (może być konieczne użycie opcji
--force
).
Stwórz Pull Request i poproś prowadzącego o weryfikację.
- Po akceptacji, zmerguj Pull Request.
Przejdź na gałąź
feature/<twój_numer_indeksu>/cherrypick
:1
git checkout feature/<twój_numer_indeksu>/cherrypick
Wykonaj cherry-pick ostatniego commita z gałęzi
main
:- Znajdź identyfikator ostatniego commita na
main
(np.abcdef1
). Wykonaj cherry-pick:
1
git cherry-pick abcdef1
- Znajdź identyfikator ostatniego commita na
Wypchnij zmiany, stwórz Pull Request i poproś prowadzącego o weryfikację.
Podsumowanie
Podczas tych zajęć nauczyliśmy się:
- Jak wykonać fork repozytorium na GitHubie.
- Podstaw korzystania z języka Markdown do tworzenia plików README i dokumentacji.
- Jak wykonać squash commitów za pomocą
git rebase -i
w terminalu. - Jak używać git cherry-pick do przenoszenia pojedynczych commitów między gałęziami.
- Pracy z gałęziami w Git, zarówno z użyciem terminala, jak i graficznych interfejsów użytkownika.
- Jak tworzyć i zarządzać Pull Requestami na GitHubie.
Dodatkowe Materiały
- Dokumentacja Gita: https://git-scm.com/doc
- Pro Git Book: https://git-scm.com/book/en/v2
- Markdown Guide: https://www.markdownguide.org/basic-syntax/
Ćwiczenia do Samodzielnego Wykonania
- Eksperymentuj z
git rebase -i
, aby lepiej zrozumieć, jak działa interaktywne rebase i jakie możliwości oferuje. - Spróbuj użyć
git revert
do cofnięcia zmian w repozytorium. - Zapoznaj się z innymi narzędziami GUI do Gita, takimi jak GitKraken, Tower czy Git Extensions.
Pamiętaj, że praktyka czyni mistrza. Im więcej będziesz pracować z Gitem, tym bardziej intuicyjne staną się te procesy.