Git przydatne komendy do codziennej pracy


Git jest to narzędzie do zarządzania repozytorium kodu, nad którym pracujemy. Powszechnie używany system kontroli wersji. Wiele osób na co dzień wykorzystuje tylko podstawowe komendy jednak to narzędzie ma masę innych, które musimy znać i biegle używać aby wydajnie programować. 

Zapisywanie pracy, której jeszcze nie skończyliśmy

 git rebase -i

Pojawi się notatnik z listą zmian. Słowo "squash" or "fixup" zamieniamy ze słowem pick, w miejscu wysłanej zmiany którą chcemy połączyć z ostatnią zmianą (na samej górze listy). 


git stash 

Stashowanie umożliwia zapisanie kodu, nad którym jeszcze pracujemy. Jest on na tyle niekompletny, że nie można go pokazać kolegom ale jednak chcemy go zachować lokalnie. Dzięki tej komendzie możemy zostawić jedną rzecz w trakcie i przeskoczyć do innej, która wymaga natychmiastowego naprawienia. Poniżej przykład użycia krok po kroku:

  1. Załóżmy, że mamy zmiany do zapisania aby sprawdzić jakie konkretnie wykonujemy komendę: git status
  2. Chcąc zapisać zmiany bez commitowania ich wykonujemy: git stash.
  3. Twoje lokalne repozytorium jest teraz bez żadnych zmodyfikowanych plików. Możesz rozpocząć pracę nad innym zadaniem. Możesz pracować na głównej gałęzi, przełączać się między gałęziami, tworzyć nowe itd.
  4. Domyślnie rzeczy zestashowane są definiowane jako WIP czyli work in progress
Co zrobić aby wrócić do pracy, którą pozostawiliśmy w trakcie?
Git stash jest tylko tymczasowym miejscem do przechowywania zmian. W przypadku gdy jesteśmy gotowi do kontynuowania zmian wykonujemy komendę: git stash pop. Przywraca ostatnio zestashowane zmiany. 

Jeżeli lista zmian zawiera wiele pozycji, możemy wybrać konkretną za pomocą komendy:
git stash pop stash@{1} # gdzie stash@{1}  oznacza konkretną pozycję.

Wyświetlanie listy zmian tymczasowych
Kiedy wykonasz komendę git stash system kontroli wersji Git utworzy obiekt z nazwą i zapisze go w lokalnym repozytorium. W celu wyświetlenia listy zapisanych rzeczy wykonujemy: git stash list. Wyświetli się lista zestashowanych rzeczy.

Łączenie wielu commitów w jeden po wysłaniu ich na serwer?

Najpierw przechodzimy na gałąź, na której chcemy połączyć commity wysłane na serwer zdalny.
git checkout my_branch

Łączymy ostatnie np. 4 commity za pomocą polecenia:
git reset --soft HEAD~4

Wysyłamy zmiany lokalnie. Pojawi się notatnik z możliwością wpisania nazwy commita łączącego ostatnie 4 commity.
git commit

Możemy też dodać parametr -m i od razu wpisać nazwę commita 
git commit -m "Połączony commit gotowy do wysłania do głównego brancha"

Wysyłamy zmiany na serwer zdalny:
git push --force origin my_branch

src: https://stackoverflow.com/questions/5667884/how-to-squash-commits-in-git-after-they-have-been-pushed

Git rebase zamiast git merge!

W przypadku gdy pracujemy nad bardziej zaawansowanym projektem. Gdzie powstają w szybkim czasie gałęzie z nowymi funkcjami systemu, kod naprawiający niedziałające rzeczy itd. Warto zamiast komendy git merge użyć:
git rebase

Po zrobieniu zmian pamiętaj i ustawieniu HEAD na samym początku listy zmian. Niestety są pewne kłopoty w IntelliJ z ustawieniem go w odpowiednim miejscu. Aby to zrobić poprawnie, wykonaj komenndę:
git push --force-with-lease

Powoduje on wypushowanie zmian w trybie force jednak w przypadku zaistnienia konfliktów poinformuje Cię o tym. Jeżeli nie czujesz się pewnie z tą komendą poczytaj o niej więcej w internecie.

Więcej na temat stosowania komendy git rebase w IntelliJ możesz znaleźć tutaj: https://www.youtube.com/watch?v=dqVqMwLzOjU


Pozostałe przydatne komendy:

  • tools
  • init
  • local add, commit
  • what add means ?
  • git interlnals
  • git show
  • shortcuts
  • amend
  • unstage
  • unmodifing
  • tag
  • stash
  • bare repo
  • remotes
  • clone
  • branch
  • merge
  • diff
  • clean-up
  • fetch
  • rebase
  • configs
  • ignores
  • reflogs
  • interactive-rebase
  • bisect
  • revert
  • cherry-pick
  • gitflow
src: Przykładowe szkolenie
Jak obsługiwać Git z poziomu interfejsu IntelliJ: https://www.jetbrains.com/help/idea/edit-project-history.html#squash-commits




Komentarze

Popularne posty