Skip to content

Przydatne komendy git

🔹 Podstawowe operacje

PolecenieOpis
git initInicjalizuje nowe repozytorium Git w bieżącym katalogu
git clone <repo-url>Klonuje zdalne repozytorium na lokalny komputer
git statusWyświetla status plików (zmienione, nieśledzone, staged)
git add <file>Dodaje plik do obszaru staged (przygotowanie do commitu)
git add .Dodaje wszystkie zmienione pliki do staged
git reset <file>Usuwa plik z obszaru staged (ale nie usuwa zmian!)
git commit -m "Opis zmian"Tworzy nowy commit z podanymi zmianami
git commit --amend -m "Nowy opis"Edytuje ostatni commit (zmiana opisu lub dodanie plików)

🌿 Praca z branchami

PolecenieOpis
git branchLista lokalnych branchy
git branch -rLista branchy zdalnych
git branch <new-branch>Tworzy nowy branch
git checkout <branch>Przełącza się na dany branch
git switch <branch>Alternatywna wersja checkout (nowsza)
git checkout -b <new-branch>Tworzy i przełącza się na nowy branch
git branch -d <branch>Usuwa lokalny branch (jeśli został zmerge’owany)
git branch -D <branch>Wymuszone usunięcie lokalnego brancha
git push origin --delete <branch>Usunięcie brancha z remote

🔄 Resetowanie, cofanie zmian

PolecenieOpis
git checkout -- <file>Przywraca plik do ostatniego commitu (usuwa zmiany)
git reset --soft HEAD~1Cofnij ostatni commit, ale zachowaj zmiany w staged
git reset --mixed HEAD~1Cofnij commit i usuń staged, ale zachowaj zmiany w plikach
git reset --hard HEAD~1Cofnij commit i całkowicie usuń zmiany
git reset --hard origin/<branch>Przywraca branch do stanu z remote (uwaga: utrata lokalnych zmian!)

📝 Stash – zapisywanie zmian tymczasowo

PolecenieOpis
git stashZapisuje lokalne zmiany bez commitu i czyści working directory
git stash listPokazuje zapisane stashe
git stash applyPrzywraca ostatnie zmiany ze stash (ale nie usuwa ich z listy)
git stash dropUsuwa ostatni stash
git stash popPrzywraca zmiany i usuwa stash z listy
git stash clearUsuwa wszystkie zapisane stash'e

📜 Przeglądanie historii i zmian

PolecenieOpis
git log --oneline --graph --decorate --allGraficzna historia commitów
git log -p <file>Pokaż historię zmian w danym pliku
git log --since="1 week ago"Log commitów z ostatniego tygodnia
git blame <file>Pokaż kto i kiedy zmieniał każdą linię w pliku
git diffPokaż różnice między staged a working directory
git diff <branch1>..<branch2>Porównaj zmiany między branchami
git show <commit-hash>Pokaż zawartość konkretnego commita

🔧 Rebase zmian (przenoszenie commitów na inny branch)

Scenariusz rebase krok po kroku

Załóżmy, że mamy dwa branche:

  • feature-branch – zawiera zmiany, które chcemy przenieść
  • target – docelowy branch, na który przenosimy zmiany (zmiany z feature-branch nad zmianami z target)

1. Upewnij się, że target jest aktualny

Najpierw przechodzimy na branch docelowy (target) i aktualizujemy go:

bash
git checkout target
git pull origin target

2. Przejdź na branch, który chcesz zrebase’ować

bash
git checkout feature-branch

3. Rozpocznij rebase na target

bash
git rebase target

Git przepisze historię zmian z feature-branch na najnowszy stan target.

4. Rozwiązywanie konfliktów (jeśli wystąpią)

bash
git status

Zobaczysz listę plików z konfliktami. Otwórz je w edytorze tekstu, ręcznie popraw zmiany i zapisz. Dodaj poprawione pliki:

bash
git add <plik-z-konfliktem>

Kontynuuj rebase:

bash
git rebase --continue

Jeśli konfliktów jest więcej, powtarzaj powyższe kroki, aż rebase zostanie zakończony.

Wgraj zmiany

bash
git push origin feature-branch --force-with-lease

WARNING

Uwaga! --force-with-lease jest bezpieczniejszą wersją --force, ponieważ sprawdza, czy nikt inny nie zmienił brancha w międzyczasie.

5. Anulowanie rebase (jeśli coś poszło nie tak)

Jeśli chcesz anulować rebase i wrócić do poprzedniego stanu:

bash
git rebase --abort

🔧 Cherry pick wybranych zmian (kopiowanie commitów na inny branch)

Scenariusz cherry pick krok po kroku

Załóżmy, że mamy dwa branche:

  • feature-branch – zawiera zmiany, które chcemy skopiować
  • target – docelowy branch, na który kopiujemy zmiany z feature-branch

1. Upewnij się, że feature-branch jest aktualny

Najpierw przechodzimy na branch zawierający funkcjonalność (feature-branch) i aktualizujemy go:

bash
git checkout feature-branch
git pull origin feature-branch

2. Wróć na branch, do którego chcesz kopiować zmiany

bash
git checkout target

3. Rozpocznij kopiowanie zmian do target

Kopiować możemy na różne sposoby (np. tylko wybrane commity - wtedy bazujemy na hash commitu)

bash
git cherry-pick <commit1_hash_part> <commit2_hash_part>

Albo jeśli chcemy skopiować zakres zmian. Wtedy do komendy przekazujemy commit początkowy i końcowy

bash
git cherry-pick <start_commit>^..<end_commit>

Jesli chcemy skopiować zmieny od jakiegoś momentu do aktualnej wersji danej gałęzy to:

bash
git cherry-pick <start_commit>..feature-branch

4. Rozwiązywanie konfliktów (jeśli wystąpią)

bash
git status

Zobaczysz listę plików z konfliktami. Otwórz je w edytorze tekstu, ręcznie popraw zmiany i zapisz. Dodaj poprawione pliki:

bash
git add <plik-z-konfliktem>

Kontynuuj rebase:

bash
git cherry-pick --continue

Jeśli konfliktów jest więcej, powtarzaj powyższe kroki, aż cherry-pick zostanie zakończony.

Wgraj zmiany

bash
git push origin target

5. Anulowanie kopiowania (jeśli coś poszło nie tak)

Jeśli chcesz anulować cherry-pick i wrócić do poprzedniego stanu:

bash
git cherry-pick --abort