🐙 Git i GitHub CLI
Podstawowe i zaawansowane polecenia Git do kontroli wersji, pracy z gałęziami, repozytoriami zdalnymi, stash, tagami oraz GitHub CLI.
🔹 Podstawowe polecenia
| Polecenie | Przykład | Opis | 
|---|---|---|
| git add | Dodaj plik do obszaru staging | |
| git add file.txt | Dodaj konkretny plik do następnego commita | |
| git add . | Dodaj wszystkie zmiany w bieżącym katalogu i poniżej | |
| git add -p | Interaktywnie wybierz fragmenty plików do dodania (przydatne dla częściowych commitów) | |
| git clone | Sklonuj repozytorium do nowego katalogu | |
| git clone -b branch_name URL | Sklonuj tylko wskazaną gałąź (zamiast domyślnej) | |
| git clone --depth 1 URL | Sklonuj tylko ostatni commit, tworząc płytką kopię w celu oszczędzenia czasu i miejsca | |
| git commit | Zapisz zmiany w repozytorium | |
| git commit -m "Initial commit" | Commit z wiadomością bez otwierania edytora | |
| git commit -a -m "Fix bugs" | Dodaj do stagingu i zatwierdź wszystkie zmodyfikowane pliki śledzone wraz z wiadomością | |
| git commit --amend | Zaktualizuj ostatni commit (zmień wiadomość lub dodaj więcej zmian) | |
| git commit --fixup abc1234 | Utwórz commit typu fixup, aby później automatycznie scalić podczas interaktywnego rebase | |
| git config | Pobierz i ustaw opcje repozytorium lub globalne | |
| git config --global user.name "Name" | Ustaw globalną nazwę użytkownika Git | |
| git config --global user.email "email@example.com" | Ustaw globalny email Git | |
| git config --list | Wyświetl wszystkie ustawienia Git (nazwa, email, edytor itd.) | |
| git diff | Pokaż różnice między commitami, commitem a drzewem roboczym itd. | |
| git diff HEAD | Pokaż, co zmieniłeś od ostatniego commita (niezapisane zmiany) | |
| git diff --staged | Pokaż, co zostanie dołączone do następnego commita | |
| git diff --word-diff HEAD~1 | Pokaż różnice na poziomie słów | |
| git grep | Przeszukuj pliki w repozytorium | |
| git grep "functionName" | Znajdź wszystkie wystąpienia  | |
| git grep -n "TODO" | Znajdź linie zawierające  | |
| git grep -i "login" | Wyszukaj słowo  | |
| git init | Utwórz puste repozytorium Git lub zainicjalizuj ponownie istniejące | |
| git init my-project | Zainicjuj nowe repozytorium w katalogu my-project | |
| git init --bare | Zainicjuj repozytorium bare | |
| git log | Pokaż logi commitów | |
| git log --oneline | Pokaż historię commitów w kompaktowym formacie jednoliniowym | |
| git log --graph --all | Pokaż wszystkie gałęzie w wizualnym grafie commitów | |
| git log -p --stat | Pokaż patch i statystyki zmian plików dla commitów | |
| git reset | Usuń pliki z obszaru staging, zachowując zmiany w katalogu roboczym | |
| git reset HEAD file.txt | Usuń plik ze stagingu (zachowuje edycje) | |
| git reset --hard HEAD~1 | Cofnij się o jeden commit i usuń wszystkie zmiany (nieodwracalne!) | |
| git reset --soft HEAD~1 | Cofnij ostatni commit, ale zachowaj zmiany gotowe do ponownego commita | |
| git reset --mixed HEAD~1 | Cofnij commit, ale pozostaw zmiany w katalogu roboczym (nie dodane do stagingu) | |
| git show | Pokaż różne typy obiektów | |
| git show <commit_hash> | Pokaż zmiany i wiadomość konkretnego commita | |
| git show HEAD~1 | Pokaż commit poprzedzający bieżący | |
| git show --stat | Pokaż podsumowanie zmian plików dla ostatniego commita | |
| git status | Pokaż status drzewa roboczego | |
| git status -s | Pokaż status w skróconym formacie | |
| git status -b | Pokaż bieżącą gałąź i status plików | 
🌿 Gałęzie i scalanie
| Polecenie | Przykład | Opis | 
|---|---|---|
| git branch | Utwórz, wyświetl lub usuń gałęzie | |
| git branch new-feature | Utwórz nową gałąź o nazwie  | |
| git branch -d old-feature | Usuń lokalną gałąź o nazwie  | |
| git checkout | Przełączaj gałęzie lub przywracaj pliki z innego commita | |
| git checkout main | Przełącz na gałąź  | |
| git checkout -b new-branch | Utwórz i przełącz na nową gałąź o nazwie  | |
| git switch | Przełączaj gałęzie (uproszczona alternatywa dla checkout) | |
| git switch main | Przełącz na gałąź  | |
| git switch -c feature-x | Utwórz i przełącz na nową gałąź o nazwie  | |
| git switch new-feature | Przełącz na istniejącą gałąź o nazwie  | |
| git merge | Połącz zmiany z innej gałęzi z bieżącą | |
| git merge new-feature | Scal gałąź  | |
| git merge --no-ff new-feature | Zawsze utwórz commit scalający (nawet jeśli możliwy jest fast-forward) | |
| git merge --abort | Anuluj scalanie i cofnij zmiany, jeśli wystąpią konflikty | |
| git rebase | Przenieś lub ponownie zastosuj commity na nową bazę | |
| git rebase main | Zastosuj commity z twojej gałęzi na szczycie gałęzi  | |
| git rebase -i HEAD~3 | Interaktywnie edytuj ostatnie 3 commity | |
| git rebase --abort | Zatrzymaj i cofnij trwający rebase | |
| git rebase -i --autosquash HEAD~5 | Automatycznie squashuj commity oznaczone jako fixup lub squash podczas interaktywnego rebase | |
| git cherry-pick | Zastosuj wybrane commity z innej gałęzi | |
| git cherry-pick <hash> | Zastosuj konkretny commit (po hashu) do bieżącej gałęzi | |
| git cherry-pick --continue | Kontynuuj cherry-pick po rozwiązaniu konfliktów | |
| git cherry-pick A^..B | Zastosuj zakres commitów od  | 
📡 Repozytoria zdalne
| Polecenie | Przykład | Opis | 
|---|---|---|
| git remote | Zarządzaj linkami do repozytoriów zdalnych (np. GitHub) | |
| git remote -v | Pokaż nazwy zdalnych repozytoriów i ich adresy URL | |
| git remote add origin URL | Dodaj repozytorium zdalne o nazwie  | |
| git pull | Pobierz i automatycznie scal zmiany ze zdalnej gałęzi | |
| git pull origin main | Pobierz i scal zmiany ze zdalnej gałęzi  | |
| git pull --rebase origin main | Pobierz i zrób rebase swojej bieżącej gałęzi na szczycie zdalnej zamiast scalania | |
| git push | Wyślij swoje lokalne zmiany do repozytorium zdalnego | |
| git push origin main | Wypchnij swoją lokalną gałąź  | |
| git fetch | Pobierz zmiany ze zdalnego repozytorium bez scalania | |
| git fetch origin | Pobierz wszystkie aktualizacje ze zdalnego  | |
| git fetch origin main | Pobierz tylko gałąź  | |
| git fetch --all | Pobierz aktualizacje ze wszystkich zdalnych repozytoriów | |
| git fetch --prune | Wyczyść usunięte gałęzie — usuń lokalne referencje do gałęzi, które zostały usunięte zdalnie | |
| git fetch --dry-run | Pokaż, co zostałoby pobrane, bez rzeczywistego pobierania | |
| git fetch origin +main | Wymuś aktualizację lokalnej gałęzi śledzącej ( | 
📦 Stash i czyszczenie
| Polecenie | Przykład | Opis | 
|---|---|---|
| git stash | Tymczasowo zapisz niezacommitowane zmiany (praca w toku) | |
| git stash | Zapisz zmodyfikowane i dodane pliki, a następnie przywróć katalog roboczy do ostatniego commita | |
| git stash apply | Ponownie zastosuj ostatnie zmiany ze stash (stash pozostaje zapisany) | |
| git stash pop | Ponownie zastosuj i usuń ostatni stash | |
| git stash list | Pokaż listę wszystkich zapisanych zmian (stash) | |
| git stash branch feature-fix | Utwórz nową gałąź i zastosuj do niej ostatni stash | |
| git clean | Trwale usuń nieśledzone pliki (nie w Git) | |
| git clean -f | Usuń nieśledzone pliki w bieżącym katalogu | |
| git clean -fd | Usuń nieśledzone pliki i foldery | |
| git clean -n | Pokaż, co zostanie usunięte (suchy run) | 
🏷️ Tagi
| Polecenie | Przykład | Opis | 
|---|---|---|
| git tag | Utwórz, wyświetl lub usuń tagi oznaczające konkretne punkty w historii (np. wydania) | |
| git tag -a v1.0 -m "Version 1.0" | Utwórz tag adnotowany  | |
| git tag -d v1.0 | Usuń lokalny tag o nazwie  | |
| git push | Wyślij commity, gałęzie i tagi z lokalnego do repozytorium zdalnego | |
| git push origin --tags | Wypchnij wszystkie lokalne tagi do zdalnego (przydatne po otagowaniu wielu wersji) | |
| git push origin v1.0 | Wypchnij konkretny tag (np.  | |
| git push origin :refs/tags/v1.0 | Usuń zdalny tag  | 
🛠️ Rozwiązywanie konfliktów
| Polecenie | Przykład | Opis | 
|---|---|---|
| git mergetool | Otwórz wizualne narzędzie do rozwiązywania konfliktów scalania | |
| git mergetool --tool=meld | Użyj konkretnego narzędzia do scalania (np. Meld), aby rozwiązać konflikty | |
| git rerere | Pozwól Git zapamiętać, jak wcześniej rozwiązałeś konflikty scalania | |
| git config --global rerere.enabled true | Włącz automatyczne ponowne użycie wcześniejszych rozwiązań konfliktów | |
| git rerere status | Pokaż, które pliki mają zapisane rozwiązania konfliktów | |
| git rerere diff | Pokaż, jakie zmiany Git zapisał do ponownego użycia | 
⚙️ Zaawansowane polecenia
| Polecenie | Przykład | Opis | 
|---|---|---|
| git bisect | Użyj wyszukiwania binarnego, aby znaleźć commit, który wprowadził błąd | |
| git bisect start | Rozpocznij wyszukiwanie binarne między znanym dobrym a złym commitem, aby zlokalizować błąd | |
| git bisect bad | Oznacz bieżący commit jako “zły” (zawiera błąd) | |
| git bisect good <commit> | Oznacz znany “dobry” commit, w którym błąd nie występował | |
| git blame | Pokaż, kto ostatnio zmodyfikował każdą linię pliku, wraz z rewizją i autorem | |
| git blame file.txt | Pokaż autora i informacje o commicie dla każdej linii pliku | |
| git blame -L 10,20 file.txt | Pokaż informacje blame tylko dla linii 10–20 | |
| git blame --show-email file.txt | Pokaż adresy e-mail autorów obok zmian w liniach | |
| git reflog | Wyświetl i zarządzaj logiem referencji (reflog) ruchów gałęzi i HEAD | |
| git reflog show main@{1.week.ago} | Zobacz, gdzie wskazywała gałąź  | |
| git reflog expire --expire=30.days --dry-run | Pokaż, które wpisy reflog starsze niż 30 dni można wyczyścić (bez zmian) | |
| git reflog delete HEAD@{2} | Usuń konkretny wpis reflog (ostrożnie, może wpłynąć na odzyskiwanie) | |
| git submodule | Dodaj, zainicjuj, zaktualizuj lub sprawdź submoduły (repozytoria wewnątrz repozytoriów) | |
| git submodule add URL path | Dodaj zewnętrzne repozytorium jako submoduł w określonej ścieżce | |
| git submodule update --init | Zainicjuj i pobierz wszystkie submoduły wymienione w repozytorium | |
| git submodule foreach git pull | Uruchom  | |
| git submodule sync --recursive | Zsynchronizuj adresy URL submodułów po zmianach w pliku  | |
| git submodule update --remote --merge | Zaktualizuj submoduły do najnowszego commita z ich zdalnych gałęzi | |
| git archive | Utwórz archiwum (zip, tar itp.) plików z konkretnego commita lub gałęzi | |
| git archive --format=zip HEAD > archive.zip | Utwórz archiwum ZIP bieżących plików projektu w HEAD | |
| git archive -o release.tar.gz HEAD | Utwórz skompresowane archiwum  | |
| git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz | Utwórz skompresowane archiwum  | |
| git gc | Wyczyść niepotrzebne pliki i zoptymalizuj repozytorium pod kątem wydajności | |
| git gc --aggressive | Przeprowadź dokładne czyszczenie i optymalizację (może być wolne, ale skuteczne) | |
| git gc --prune=now | Usuń wszystkie nieosiągalne obiekty natychmiast (niebezpieczne, jeśli nie masz pewności) | |
| git shortlog | Szybkie podsumowanie autorów i ich commitów | |
| git shortlog -e | Pokaż listę autorów z ich adresami e-mail (np. do analizy, kto i ile wniósł) | |
| git shortlog -s -n | Pokaż, ile commitów zrobił każdy autor, posortowane według liczby commitów | |
| git shortlog -sne | To samo, ale zawiera także imiona i adresy e-mail — przydatne do szczegółowego śledzenia aktywności | |
| git revert | Utwórz nowy commit, który cofa zmiany z poprzedniego commita bez przepisywania historii | |
| git revert HEAD | Cofnij ostatni commit, tworząc nowy commit odwracający jego zmiany | |
| git revert <commit_hash> | Cofnij konkretny commit po jego hashu, bezpiecznie dodając nowy commit odwracający | 
🐙 GitHub CLI
ghpozwala zarządzać GitHubem z poziomu terminala.
| Polecenie | Przykład | Opis | 
|---|---|---|
| gh auth login | Uwierzytelnij się w hostingu GitHub, aby umożliwić poleceniom CLI interakcję z Twoim kontem | |
| gh auth login --with-token < mytoken.txt | Uwierzytelnij się przy użyciu personal access token zapisanego w pliku ( | |
| gh auth login --hostname enterprise.internal | Uwierzytelnij się w serwerze GitHub Enterprise (nie github.com) | |
| gh repo clone | Sklonuj repozytorium GitHub na swoją maszynę lokalną | |
| gh repo clone user/repo | Sklonuj repozytorium  | |
| gh repo clone cli/cli -- --depth=1 | Sklonuj repozytorium, ale pobierz tylko najnowszy commit dla szybszej i mniejszej kopii | |
| gh repo clone cli/cli workspace/cli | Sklonuj repozytorium do niestandardowego folderu  | |
| gh issue list | Wyświetl listę zgłoszeń (issues) w repozytorium GitHub, opcjonalnie filtrowanych według różnych kryteriów | |
| gh issue list --assignee "@me" | Wyświetl zgłoszenia przypisane do Ciebie | |
| gh issue list --state all | Wyświetl zgłoszenia niezależnie od stanu (otwarte lub zamknięte) | |
| gh issue list --search "error no:assignee sort:created-asc" | Wyświetl zgłoszenia pasujące do frazy “error”, nieprzypisane, posortowane według daty utworzenia rosnąco | |
| gh pr create | Utwórz pull request na GitHub przez CLI | |
| gh pr create --title "..." | Utwórz pull request z podanym tytułem | |
| gh pr create --project "Roadmap" | Powiąż pull request z projektem GitHub o nazwie “Roadmap” | |
| gh pr create --base develop --head monalisa:feature | Utwórz PR z gałęzi  | |
| gh repo create | Utwórz nowe repozytorium GitHub z poziomu CLI | |
| gh repo create my-project | Utwórz nowe repozytorium o nazwie  | |
| gh repo create my-project --public --clone | Utwórz repozytorium publiczne i sklonuj je lokalnie | |
| gh repo create my-project --private --source=. --remote=upstream | Utwórz prywatne repozytorium zdalne z bieżącego folderu i dodaj zdalne o nazwie  | 
💡 Aliasy Git (przydatne skróty)
Skonfiguruj wygodne aliasy, aby przyspieszyć często używane polecenia Git:
git config --global alias.br branch                                       # skrót dla: git branch
git config --global alias.ci commit                                       # skrót dla: git commit
git config --global alias.co checkout                                     # skrót dla: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # ładny wykres historii
git config --global alias.last "log -1 HEAD"                              # pokaż ostatni commit
git config --global alias.st status                                       # skrót dla: git status🚀 Zaawansowane polecenia Git dla profesjonalistów
| Polecenie | Przykład | Opis | 
|---|---|---|
| git filter-repo | Potężne i wydajne narzędzie do przepisywania historii Git w celu usunięcia lub modyfikacji plików, autorstwa lub ścieżek; zastępuje git filter-branch z większą szybkością i bezpieczeństwem | |
| git filter-repo --path secret.txt --invert-paths | Wydajnie przepisz historię repozytorium, aby usunąć wrażliwe pliki lub katalogi bez problemów wydajnościowych  | |
| git filter-repo --replace-text replacements.txt | Masowo zastępuj ciągi lub wzorce w całej historii (np. czyszczenie danych uwierzytelniających) | |
| git filter-repo --subdirectory-filter src | Wyodrębnij historię podkatalogu do nowego repozytorium, zachowując metadane commitów | |
| git worktree | Zarządzaj wieloma katalogami roboczymi powiązanymi z jednym repozytorium, umożliwiając równoległą pracę nad różnymi gałęziami bez klonowania | |
| git worktree add ../feature feature-branch | Utwórz dodatkowy katalog roboczy powiązany z tym samym repozytorium, umożliwiając równoległe sprawdzanie gałęzi bez klonów | |
| git worktree list | Wyświetl wszystkie aktywne worktree, ich ścieżki i powiązane gałęzie | |
| git worktree remove ../feature | Usuń powiązane worktree, gdy nie jest już potrzebne, bezpiecznie czyszcząc katalogi robocze | |
| git replace | Utwórz tymczasowe referencje zastępujące istniejące obiekty, umożliwiając nieniszczącą lokalną manipulację historią i testowanie | |
| git replace <old_commit> <new_commit> | Tymczasowo podmień jeden commit na inny w swoim repo lokalnym — przydatne do testowania lub łatki historii bez jej przepisywania | |
| git replace --list | Pokaż wszystkie aktywne referencje zastępcze | |
| git replace -d <replace_ref> | Usuń określoną referencję zastępczą, aby przywrócić poprzednie zachowanie | |
| git stash | Tymczasowo zapisz niezacommitowane zmiany na stosie, umożliwiając przełączanie kontekstu bez commitowania niedokończonej pracy | |
| git stash push -p | Interaktywnie wybierz fragmenty zmian do zapisania w stash, zapewniając szczegółową kontrolę | |
| git stash push -m "WIP selective stash" | Utwórz stash z własną wiadomością dla łatwiejszej identyfikacji | |
| git stash apply stash@{2} | Zastosuj konkretny stash z listy stash, bez jego usuwania | |
| git rebase | Ponownie zastosuj commity na szczycie innej bazy, ułatwiając czystą, liniową historię projektu oraz interaktywną edycję historii | |
| git rebase --interactive --autosquash | Rozpocznij interaktywną sesję rebase, która automatycznie zmienia kolejność i scala commity oznaczone jako fixup lub squash, upraszczając historię | |
| git rebase -i --autosquash HEAD~10 | Automatycznie zmień kolejność i połącz commity oznaczone jako fixup lub squash, czyszcząc historię commitów przed wypchnięciem | |
| git commit --fixup <commit> | Utwórz commit typu fixup, który zostanie scalony automatycznie podczas interaktywnego rebase | |
| git commit --squash <commit> | Utwórz commit typu squash, aby połączyć go z określonym commitem podczas rebase | |
| git bisect | Narzędzie wyszukiwania binarnego do wydajnej identyfikacji commita, który wprowadził błąd, poprzez testowanie kolejnych commitów i zawężanie wadliwej zmiany | |
| git bisect run | Zautomatyzuj proces bisect, uruchamiając określony skrypt testowy na każdym commicie, aby szybko zidentyfikować commit wprowadzający błąd bez ręcznej interwencji | |
| git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh | Automatyzuj bisekcję, uruchamiając skrypt testowy na każdym commicie, znacznie przyspieszając identyfikację błędu | |
| git bisect visualize | Otwórz narzędzie graficzne do wizualizacji procesu bisekcji | |
| git bisect reset | Zakończ tryb bisect i wróć do oryginalnego HEAD | |
| git commit | Zapisz zmiany w repozytorium z zaawansowanymi opcjami amend, sign, fixup i dostosowania wiadomości w celu utrzymania wysokiej jakości historii projektu | |
| git commit --gpg-sign | Utwórz commit podpisany kluczem GPG, aby zapewnić kryptograficzną weryfikację autentyczności i autorstwa | |
| git commit -S -m "Signed commit" | Kryptograficznie podpisz swoje commity kluczem GPG, zapewniając integralność i weryfikację autorstwa | |
| git config --global user.signingkey <key_id> | Skonfiguruj klucz GPG używany do podpisywania commitów globalnie | |
| git log --show-signature | Zweryfikuj i wyświetl informacje o podpisach GPG commitów | |
| git reflog | Prowadź log aktualizacji HEAD i gałęzi, niezbędny do odzyskiwania utraconych commitów i zrozumienia lokalnych ruchów historii | |
| git reset --hard HEAD@{3} | Zresetuj bieżącą gałąź do wcześniejszego stanu z reflog, aby odzyskać lub cofnąć zmiany | |
| git reflog expire --expire=now --all | Natychmiast wygaś wszystkie wpisy reflog, czyszcząc historię reflog (ostrożnie) | 
🧰 Wskazówki profesjonalne i automatyzacja pracy
| Temat | Polecenia / Przykład | Wyjaśnienie i wskazówki | 
|---|---|---|
| Agresywne czyszczenie repozytorium | git gc --aggressive --prune=now | Wykonuje głęboką kolekcję śmieci i natychmiast usuwa nieosiągalne obiekty w celu optymalizacji repozytorium. Używaj w czasie konserwacji | 
| Równoległe worktree gałęzi | git worktree add ../feature-branch feature | Utrzymuj wiele katalogów roboczych dla równoczesnego rozwoju funkcji, unikając kosztów klonowania | 
| Czysta, liniowa historia | git rebase -i --autosquash | Przed wypchnięciem wykonaj interaktywny rebase z autosquash, aby zachować historię czystą i czytelną | 
| Bezpieczne commity | git commit -S | Podpisuj commity kluczem GPG, aby zwiększyć wiarygodność w repozytoriach współdzielonych; wymagane w wielu środowiskach korporacyjnych | 
| Automatyczne bisekcje | git bisect run ./test-script.sh | Automatyzuj wyszukiwanie błędów, uruchamiając skrypt testowy na każdym kandydacie podczas bisect | 
| Pamięć podręczna rozwiązywania konfliktów | git config --global rerere.enabled true | Włącz ponowne użycie rozwiązań konfliktów, aby przyspieszyć rozwiązywanie powtarzających się konfliktów podczas rebase lub merge | 
| Wspólne aliasy i hooki | Przechowuj wspólne aliasy Git i hooki commitów w repozytorium współdzielonym lub pipeline CI, aby egzekwować standardy zespołu i zwiększać produktywność | 
Dodatkowe zasoby
🧠 Wskazówka
Nie próbuj zapamiętywać wszystkiego. Używaj --help, eksploruj i regularnie ćwicz:
git help <command>
git status🌐 Przydatne linki
📘 Oficjalna dokumentacja Git — szczegółowy podręcznik wszystkich poleceń Git:
https://git-scm.com/docs
📙 Learn Git Branching — interaktywny wizualny samouczek do opanowania koncepcji gałęzi:
https://learngitbranching.js.org
📕 Książka Pro Git (darmowa, autorzy: Scott Chacon i Ben Straub):
https://git-scm.com/book
📗 Git Cheatsheet (oficjalna zwięzła ściągawka):
https://education.github.com/git-cheat-sheet-education.pdf