Przydatne komendy git
🔹 Podstawowe operacje
| Polecenie | Opis |
|---|---|
git init | Inicjalizuje nowe repozytorium Git w bieżącym katalogu |
git clone <repo-url> | Klonuje zdalne repozytorium na lokalny komputer |
git status | Wyś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
| Polecenie | Opis |
|---|---|
git branch | Lista lokalnych branchy |
git branch -r | Lista 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
| Polecenie | Opis |
|---|---|
git checkout -- <file> | Przywraca plik do ostatniego commitu (usuwa zmiany) |
git reset --soft HEAD~1 | Cofnij ostatni commit, ale zachowaj zmiany w staged |
git reset --mixed HEAD~1 | Cofnij commit i usuń staged, ale zachowaj zmiany w plikach |
git reset --hard HEAD~1 | Cofnij 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
| Polecenie | Opis |
|---|---|
git stash | Zapisuje lokalne zmiany bez commitu i czyści working directory |
git stash list | Pokazuje zapisane stashe |
git stash apply | Przywraca ostatnie zmiany ze stash (ale nie usuwa ich z listy) |
git stash drop | Usuwa ostatni stash |
git stash pop | Przywraca zmiany i usuwa stash z listy |
git stash clear | Usuwa wszystkie zapisane stash'e |
📜 Przeglądanie historii i zmian
| Polecenie | Opis |
|---|---|
git log --oneline --graph --decorate --all | Graficzna 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 diff | Pokaż 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 zfeature-branchnad zmianami ztarget)
1. Upewnij się, że target jest aktualny
Najpierw przechodzimy na branch docelowy (target) i aktualizujemy go:
git checkout target
git pull origin target2. Przejdź na branch, który chcesz zrebase’ować
git checkout feature-branch3. Rozpocznij rebase na target
git rebase targetGit przepisze historię zmian z feature-branch na najnowszy stan target.
4. Rozwiązywanie konfliktów (jeśli wystąpią)
git statusZobaczysz listę plików z konfliktami. Otwórz je w edytorze tekstu, ręcznie popraw zmiany i zapisz. Dodaj poprawione pliki:
git add <plik-z-konfliktem>Kontynuuj rebase:
git rebase --continueJeśli konfliktów jest więcej, powtarzaj powyższe kroki, aż rebase zostanie zakończony.
Wgraj zmiany
git push origin feature-branch --force-with-leaseWARNING
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:
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 zfeature-branch
1. Upewnij się, że feature-branch jest aktualny
Najpierw przechodzimy na branch zawierający funkcjonalność (feature-branch) i aktualizujemy go:
git checkout feature-branch
git pull origin feature-branch2. Wróć na branch, do którego chcesz kopiować zmiany
git checkout target3. Rozpocznij kopiowanie zmian do target
Kopiować możemy na różne sposoby (np. tylko wybrane commity - wtedy bazujemy na hash commitu)
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
git cherry-pick <start_commit>^..<end_commit>Jesli chcemy skopiować zmieny od jakiegoś momentu do aktualnej wersji danej gałęzy to:
git cherry-pick <start_commit>..feature-branch4. Rozwiązywanie konfliktów (jeśli wystąpią)
git statusZobaczysz listę plików z konfliktami. Otwórz je w edytorze tekstu, ręcznie popraw zmiany i zapisz. Dodaj poprawione pliki:
git add <plik-z-konfliktem>Kontynuuj rebase:
git cherry-pick --continueJeśli konfliktów jest więcej, powtarzaj powyższe kroki, aż cherry-pick zostanie zakończony.
Wgraj zmiany
git push origin target5. Anulowanie kopiowania (jeśli coś poszło nie tak)
Jeśli chcesz anulować cherry-pick i wrócić do poprzedniego stanu:
git cherry-pick --abort