🐙 Git i GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Opublikowano

31 sierpnia 2025

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 functionName we wszystkich plikach projektu

git grep -n "TODO"

Znajdź linie zawierające TODO i pokaż numery linii (przydatne do wyszukiwania notatek w kodzie)

git grep -i "login"

Wyszukaj słowo login bez rozróżniania wielkości liter (dopasuje Login, LOGIN, login itd.)

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 new-feature

git branch -d old-feature

Usuń lokalną gałąź o nazwie old-feature

git checkout Przełączaj gałęzie lub przywracaj pliki z innego commita
git checkout main

Przełącz na gałąź main

git checkout -b new-branch

Utwórz i przełącz na nową gałąź o nazwie new-branch

git switch Przełączaj gałęzie (uproszczona alternatywa dla checkout)
git switch main

Przełącz na gałąź main

git switch -c feature-x

Utwórz i przełącz na nową gałąź o nazwie feature-x

git switch new-feature

Przełącz na istniejącą gałąź o nazwie new-feature

git merge Połącz zmiany z innej gałęzi z bieżącą
git merge new-feature

Scal gałąź new-feature z bieżącą

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 main

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 A (bez) do B (z włączeniem)

📡 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 origin

git pull Pobierz i automatycznie scal zmiany ze zdalnej gałęzi
git pull origin main

Pobierz i scal zmiany ze zdalnej gałęzi main do swojej bieżącej 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łąź main do zdalnego origin

git fetch Pobierz zmiany ze zdalnego repozytorium bez scalania
git fetch origin

Pobierz wszystkie aktualizacje ze zdalnego origin, ale ich nie stosuj

git fetch origin main

Pobierz tylko gałąź main ze zdalnego repozytorium

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 (origin/main), nadpisując konflikty

📦 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 v1.0 z wiadomością (zapisany jako pełny obiekt Git, dobry do wydań)

git tag -d v1.0

Usuń lokalny tag o nazwie v1.0 (nie wpływa na zdalny)

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. v1.0) do repozytorium zdalnego

git push origin :refs/tags/v1.0

Usuń zdalny tag v1.0 (zwróć uwagę na składnię z dwukropkiem)

🛠️ 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łąź main tydzień temu

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 pull wewnątrz każdego submodułu, aby je zaktualizować do najnowszego commita

git submodule sync --recursive

Zsynchronizuj adresy URL submodułów po zmianach w pliku .gitmodules

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 .tar.gz z bieżącego HEAD

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Utwórz skompresowane archiwum .tar.gz bieżącego projektu, umieszczając wszystkie pliki w folderze project/ wewnątrz 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

gh pozwala 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 (mytoken.txt)

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 repo należące do user do folderu o nazwie repo

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 workspace/cli

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 feature w forku monalisa do gałęzi develop

gh repo create Utwórz nowe repozytorium GitHub z poziomu CLI
gh repo create my-project

Utwórz nowe repozytorium o nazwie my-project na GitHub (zostaną zadane pytania interaktywne)

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 upstream

💡 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-branch. Używaj ostrożnie

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