Każdy programista musi znać Git - system kontroli wersji. To jak dziennik okrętowy - zapisujesz historię zmian w kodzie.
Git to system kontroli wersji - pozwala:
Git vs GitHub:
Pobierz z: https://git-scm.com/download/win
Podczas instalacji wybierz:
Git jest już zainstalowany! Sprawdź:
1git --versionJeśli nie ma, zainstaluj przez Homebrew:
1brew install git1sudo apt-get update
2sudo apt-get install gitPo instalacji skonfiguruj Git z Twoimi danymi:
1git config --global user.name "Jack Sparrow"
2git config --global user.email "jack@blackpearl.com"Dlaczego to ważne? Każdy commit (zapis zmian) będzie miał Twoje imię i email - to jak podpis na dzienniku okrętowym.
Sprawdź konfigurację:
1git config --listMasz dwa scenariusze:
Gdy tworzysz nowy projekt Next.js, Git jest już zainicjalizowany automatycznie!
create-next-app robi to za Ciebie. Sprawdź:1ls -laZobaczysz folder
.git/ - to Git repository.Jeśli masz folder bez Git:
1cd my-project
2git initTo stworzy folder
.git/ i zainicjalizuje repozytorium.Sprawdza co się zmieniło:
1git statusZobaczysz:
1On branch main
2Changes not staged for commit:
3 modified: app/page.tsx
4
5Untracked files:
6 app/pirates/page.tsxStaging area to "poczekalnia" przed commitem.
1# Dodaj jeden plik
2git add app/page.tsx
3
4# Dodaj wszystkie pliki
5git add .
6
7# Dodaj wszystkie pliki .tsx
8git add *.tsxPo
git add pliki są staged - gotowe do zapisu (commit).Commit to jak punkt kontrolny w grze - zapisujesz stan kodu.
1git commit -m "Add pirate landing page"-m to message (wiadomość) - krótki opis co zmieniłeś.
Dobre commit messages:
Złe commit messages:
Zobacz historię wszystkich commitów:
1git logZobaczysz:
1commit a3f5b8c (HEAD -> main)
2Author: Jack Sparrow <jack@blackpearl.com>
3Date: Mon Nov 24 10:30:00 2024 +0100
4
5 Add pirate landing page
6
7commit b2e4a9d
8Author: Jack Sparrow <jack@blackpearl.com>
9Date: Mon Nov 24 09:15:00 2024 +0100
10
11 Initial commitSkróty:
1# Krótka wersja (1 linia na commit)
2git log --oneline
3
4# Ostatnie 5 commitów
5git log -5
6
7# Z grafiką branchy
8git log --graph --onelinePorównuje aktualne pliki ze staged/committed wersją:
1# Zmiany nie dodane do stage
2git diff
3
4# Zmiany w staged files
5git diff --stagedZobaczysz:
1diff --git a/app/page.tsx b/app/page.tsx
2--- a/app/page.tsx
3+++ b/app/page.tsx
4@@ -1,5 +1,5 @@
5 export default function Home() {
6 return (
7- <h1>Hello World</h1>
8+ <h1>Ahoy, Pirates!</h1>
9 )
10 }Niektóre pliki NIE powinny być w Git:
node_modules/ - ogromny folder (setki MB).env.local - sekrety (API keys, passwords).next/ - build outputdist/, build/ - compiled filesPlik
.gitignore mówi Git co ignorować:1# .gitignore
2node_modules/
3.next/
4.env.local
5.env
6.DS_Store
7*.logNext.js automatycznie tworzy
- masz to już skonfigurowane!.gitignore
Branch (gałąź) to oddzielna linia rozwoju projektu. Możesz pracować nad nową funkcją bez wpływu na główny kod.
1# Stwórz nowy branch
2git branch feature/landing-page
3
4# Przełącz się na nowy branch
5git checkout feature/landing-page
6
7# Lub jedno polecenie (stwórz + przełącz)
8git checkout -b feature/landing-pageKonwencja nazw:
feature/nazwa - nowa funkcjafix/nazwa - poprawka błędurefactor/nazwa - refactoringdocs/nazwa - dokumentacja1# Zobacz wszystkie branche
2git branch
3
4# Przełącz na main
5git checkout main
6
7# Przełącz na feature branch
8git checkout feature/landing-pageGdy skończysz funkcję, wlewasz zmiany do
main:1# Przełącz się na main
2git checkout main
3
4# Wlej zmiany z feature brancha
5git merge feature/landing-pageFast-forward merge: Jeśli
main się nie zmienił, Git po prostu przesuwa wskaźnik - to najłatwiejszy merge.3-way merge: Jeśli oba branche mają nowe commity, Git tworzy nowy commit merge.
Po zmergowaniu możesz usunąć branch:
1git branch -d feature/landing-pageGitHub to jak piracka wyspa - miejsce gdzie przechowujesz skarby (kod).
krakens-callGitHub poda Ci komendy - skopiuj je:
1# Dodaj zdalne repozytorium
2git remote add origin https://github.com/username/krakens-call.git
3
4# Zmień nazwę brancha na main (jeśli trzeba)
5git branch -M main
6
7# Wypchnij kod na GitHub
8git push -u origin mainWyjaśnienie:
origin - nazwa zdalnego repozytorium (domyślna konwencja)-u - ustaw upstream (domyślny branch do push/pull)main - nazwa branchaKażdy commit lokalnie → wyślij na GitHub:
1# Wypchnij wszystkie commity na origin/main
2git push
3
4# Wypchnij konkretny branch
5git push origin feature/landing-pageJeśli pracujesz w zespole, inni mogą wprowadzać zmiany:
1# Pobierz zmiany z GitHub i wlej do lokalnego brancha
2git pull
3
4# Pobierz z konkretnego brancha
5git pull origin mainpull = fetch + merge:
git fetch - pobiera zmianygit merge - wlewa je do Twojego branchaPobieranie istniejącego projektu z GitHub:
1git clone https://github.com/username/krakens-call.git
2cd krakens-call
3npm install
4npm run devTypowy piracki workflow:
1# Stwórz branch
2git checkout -b feature/pirate-profile
3
4# Pracuj nad kodem...
5# Edytuj app/profile/page.tsx
6
7# Sprawdź zmiany
8git status
9git diff
10
11# Dodaj do stage
12git add app/profile/
13
14# Commit
15git commit -m "Add pirate profile page with stats"
16
17# Wypchnij na GitHub
18git push origin feature/pirate-profilePull Request (PR) to prośba o wlanie zmian z Twojego brancha do
main. Zespół może zrobić code review.main1# Przełącz się na main
2git checkout main
3
4# Pobierz zmiany z GitHub
5git pull
6
7# Usuń lokalny feature branch
8git branch -d feature/pirate-profile1# Przywróć plik do ostatniego commit
2git checkout -- app/page.tsx
3
4# Przywróć wszystkie pliki
5git checkout -- .1# Usuń z stage, zostaw zmiany w pliku
2git reset app/page.tsx
3
4# Usuń wszystko ze stage
5git reset1# Cofnij commit, zostaw zmiany w plikach
2git reset --soft HEAD~1
3
4# Cofnij commit, usuń zmiany w plikach (DANGER!)
5git reset --hard HEAD~1Uwaga:
--hard USUWA zmiany bez możliwości odzyskania!Jeśli commit jest już na GitHub:
1# Stwórz nowy commit odwracający zmiany
2git revert a3f5b8c
3
4# Push
5git pushrevert tworzy nowy commit - bezpieczniejsze niż reset.Cursor ma wbudowaną obsługę Git!
AI Commit Messages: Cursor AI może sugerować commit messages na podstawie zmian!
Zapytaj Cursor AI:
Prompt 1:
1Jak cofnąć ostatni commit w Git?Prompt 2:
1Napisz dobry commit message dla zmian w landing page - dodałem hero section i cta buttonPrompt 3:
1Jak rozwiązać merge conflict w app/page.tsx?✅ Commituj często - małe, częste commity > rzadkie, duże ✅ Dobre commit messages - wyjaśnij CO i DLACZEGO ✅ Branch per feature - jedna funkcja = jeden branch ✅ Pull before push - zawsze
git pull przed git push
✅ Nie commituj secrets - .env w .gitignore
✅ Code review - używaj Pull Requests
✅ Main zawsze działa - nie merge'uj broken code do main❌ Nie commituj node_modules/ - ogromny, niepotrzebny ❌ Nie push --force na main (chyba że absolutnie musisz) ❌ Nie commituj WIP bez opisu - opisz co jest w trakcie
✅ Git - system kontroli wersji, dziennik okrętowy kodu ✅ GitHub - platforma do przechowywania kodu online ✅ git init - inicjalizacja repozytorium ✅ git add - dodawanie plików do stage ✅ git commit - zapisywanie zmian (snapshot) ✅ git push - wysyłanie commitów na GitHub ✅ git pull - pobieranie zmian z GitHub ✅ git branch - tworzenie gałęzi (branch) ✅ git merge - wlewanie zmian między branchami ✅ Pull Request - prośba o review i merge ✅ .gitignore - pliki ignorowane przez Git ✅ Cursor Source Control - GUI dla Git w edytorze
Następne kroki: W kolejnych modułach będziemy używać Git do:
Do zobaczenia! 🚀