W tym artykule napiszę o mniej znanych natomiast przydatnych komendach git'a i ich zastosowaniach. Zacznę od bardziej znanych po mniej. Zapraszam!
Przygotowywanie zmian
Stworzenie i przeniesienie na nowego branch;a można załatwić za pomocą 1 komendy:
git checkout -b new-branch-name
Dodawanie zmian do git'a to standard, ale jak robić to najefektywniej by nic nie umkneło? Najlepiej dodawać interaktywnie zmiana po zmianie i wtedy to zmusza użytkownika do przejrzenia całości a także składnia innych podczas pair programmingu do zwrócenia na to uwagi także podczas wspólnej sesji.
git add -Ap # interaktywne dodawanie zmian do git'a
Po scommittowaniu warto zrebasować zmiany interaktywnie jeśli mamy kilka commitów pod rząd w jednym pr. Do tego można użyć:
git rebase -i HEAD~{num of commits}
# lub
git rebase -i master
Czasem jest wiele nieśledzonych plików na branchu, których nie chcemy trzymać bo są np.: to jakieś cache albo stare snapshoty testów. Wtedy możemy użyć komendy:
git clean -df # -d - foldery , -f pliki
Chcesz wgrać pliki z danego commit'a do innego branch'a? Żaden problem, wystarczy użyć:
git cherry-pick {commit_hash}
Jednak, gdy myślisz o zmianie, wgraniu 1 pliku z danej referencji to możesz użyć różnych komend:
git checkout origin/master -- file.ext # origin/master może być hasem commita
# lub
git show origin/master:file.ext > file.ext
# lub
git restore -s origin/master -SW -- file.ext
# lub
git restore --source origin/master --staged --worktree -- file.ext
Obsługa stash'a
Stash to narzędzie do przechowywania lokalnych zmian branch'a zapisanych jako kopia, dzięki czemu można je przywrócić niezależnie od ów branch'a. Sprawne korzystanie z tej funkcji, sprawi, że kod posiadający jakiś feature będzie mógł być "odkładany" szybciej i sprawniej a także przenoszenie zmian i plików pomiędzy branchami może być kolejną zaletą. Dla uproszczenia przestrzeń, gdzie możemy zapisywać te zmiany lokalnie w ramach stasha będę nazywał schowkiem lub zasobnikiem zamiennie.
Legenda parametrów komend:
- {stash_item_name} - Może być to odwołanie po indeksie do konkretnego zapisu jako stash@{n} , gdzie n jest indeksem zapisu lub poprzez nazwę podaną w parametrze -m do komendy push jako stash^{\nazwa_zapisu}.
Komendy:
- git stash list - komenda pozwala sprawdzić, jakie zmiany mamy odłożone w schowku.
- git stash show {stash_item_name} - pozwala zobaczyć różnice między branchem lokalnym obecnym a wybranym zapisem.
- -p : sprawia, że widoczne zmiany są szczegółowe na poziomie contentu plików a nie tylko ich nazw.
- git stash push (jeśli używasz git stash save to lepiej użyć tej komendy w zamian bo jest deprecated) - komenda ma wiele funkcji, ale głównie pełni rolę dodawania obecnej i śledzonej serii zmian względem aktualnego lokalnego brancha.
- --all : wszystkie zmiany zostaną zapisane w zasobniku, nawet niesledzone +zignorowane w gicie.
- --include-untracked / -u : dodaje do zapisu także nieśledzone zmiany.
- -p : dodawanie interaktywne zapisu.
- git stash pop - Przywraca ostatnią serię zmian ze stosu, przy tym usuwając ją z historii.
- git stash apply {stash_item_name} - Stosuje serię zmian ze stash'a nie usuwając zapisu z historii.
- git stash drop {stash_item_name} - Usuwa zapis z historii.
- git stash clear - Usuwa wszystkie zapisy.
Konfiguracja git'a
git config --global push.autoSetupRemote true # Sprawia, że po stworzeniu brancha z poziomu cli nie trzeba będzie wywoaływać git push z parametrem --set-upstream origin {branch_name} tylko zostanie to zrobione autmatycznie.
git config --global credential.helper store # Zapamiętuje nasze dane autoryzacyjne.