Przydatne i mniej znane komendy git’a

Bez kategorii

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.