chevron-left chevron-right

[GIT] Podręczny zestaw niezbędnych komend dla każdego webdevelopera i nie tylko

W tworzeniu różnego rodzaju oprogramowania zdarzają się sytuacje, gdy trzeba naprawić istniejące bugi/błędy lub zacząć współpracę z innymi programistami nad tym samym kawałkiem kodu. To są przykładowe sytuacje w których bardzo pomocnymi narzędziami pracy są repozytoria kodu, które zapewniają możliwie najaktualniejszy kod dla wszystkich programistów.

Typy repozytoriów

W chwili obecnej można się spotkać repozytoriami typu SVN, GIT czy CVS. Każdy z nich ma swoje wady i zalety, lecz najlepszym systemem repozytoriów, w mojej opinii i nie tylko, jest system GIT.
Dostęp do repozytoriów GITa można bardzo często spotkać w Internecie, chociażby ze względu na bardzo popularny serwis/hosting aplikacji Open Source - Github, gdzie można spotkać się z wieloma bardzo ciekawymi i użytecznymi projektami, nie wspominając chociażby o projekcie Twitter Bootstrap czy Backbone.js.

Zalety systemu GIT

W tym wpisie zamierzam się skupić na systemie GIT.
Do jego zalet można zaliczyć kilka rzeczy, takich jak:

  1. Łatwość tworzenia repozytoriów kodu, nie trzeba żadnej konfiguracji.
  2. Szybkość działania, dzięki czemu zmiany są widoczne w głównym repozytorium o wiele szybciej.
  3. Łatwe rozwiązywanie konfliktów w plikach (chociaż i tak bywa to trudne czasem).
  4. Łatwość rozbicia zmodyfikowanego kodu na małe porcje, np. zmiany w jednym pliku można rozdzielić na wiele commitów w których znajdują się tylko wybrane zmodyfikowane linie kodu z pliku.
  5. Tworzenie lokalnych branchy z kodem (lokalnych kopii kodu) na których można pracować bez zakłócania pracy innych programistów.
  6. Znacząco usprawnia workflow tworzenia oprogramowania.
  7. Każda zmiana w kodzie ma swoje własne oznaczenie, dzięki czemu usuwanie/zmienianie niepoprawnego kodu jest proste.
  8. Można przygotować wiele mniejszych commitów i wysłać je za jednym razem.

GIT ma też wady, nic nie jest idealne. Można do nich zaliczyć:

  1. Brak możliwości pobierania tylko części repozytorium, np. jednego folderu z całości. Pobierane jest wszystko.
  2. Brak śledzenia pustych folderów, czyli nie można sobie najpierw przygotować struktury folderów (bez plików w nich) i "zacommitować".

Te zalety i wady spotykam w codziennym użytkowaniu systemu GIT. Być może są też inne występujące w szczególnych przypadkach.

Lista przydatnych komend GIT

git init
Inicjalizuje repozytorium GIT w danym katalogu
git add [nazwa_pliku]
Dodaje zmiany we wskazanym pliku do commita
git add .
Dodaje wszystkie zmienione pliki do commita
git add -p [nazwa_pliku]
Udostępnia możliwość dodania wybranych linii w zmodyfikowanym pliku do commita
git commit -m "[treść_commita]"
Dodaje opis do commita. Dobrym zwyczajem jest opisanie co ta zmiana wprowadza do kodu w zakresie funkcjonalnym
git add origin [adres_repozytorium, np. https://github.com/username/moje-repozytorium.git]
Ustawia konkretny adres zdalnego repozytorium jako główne repozytorium
git push origin master
Wysłanie zmian do branacha zdalnego
git push -f
Wysłanie zmian do zdalnego repozytorium ignorując konflikty, to znaczy, że jeśli wystapią konflikty to pliki zostaną nadpisane właśnie wysłaną wersją. Trzeba stosować to bardzo ostrożnie.
git checkout [nazwa_brancha]
Zmienia aktywny branch na wybrany przez użytkownika
git checkout [nazwa_pliku]
Usuwa zmiany w wybranym pliku
git checkout .
Usuwa zmiany we wszystkich zmienionych plikach
git checkout -b [nazwa_brancha]
Tworzenie nowego brancha z aktywnego brancha i przełączenie się na niego
git rebase master
Zaciągnięcie zmian z brancha głównego do brancha aktywnego
git push origin :[nazwa_brancha]
Usunięcie zdalnego brancha
git branch -d [nazwa_brancha]
Usuwanie brancha lokalnie. Nie można usunąć w ten sposób aktywnego brancha
git stash
Dodanie zmienonych plików do pamięci/stosu i usunięcie ich z aktywnego brancha
git pull --rebase
Pobranie najnowszych zmian z aktywnego brancha zdalnego
git stash pop
Przywrócenie zmodyfikowanych plików z pamięci/stosu
git stash clear
Czyszczenie pamięci/stosu
git remote prune origin
Pobranie aktualizacji o usuniętych branchach zdalnych
git fetch --all
Pobranie listy zdalnych branchy
git branch
Wyświetlenie listy lokalnych branchy
git branch -r
Wyświetlenie listy zdalnych branchy
git status
Wyświetlenie listy zmienionych plików
git diff [nazwa_pliku]
Szczegółowe wyświetlenie zmian w wybranym pliku
git reset HEAD
Resetowanie przygotowanych commitów (przed wysłaniem). Zmodyfikowane pliki są dostępne do ponownego dodania.
git reset HEAD --hard
usuwanie wszystkich zmian z brancha lokalnego i przywrócenie zmian z brancha zdalnego
git reset HEAD^ --hard
Usuwanie ostatniego commita z brancha
git reset HEAD^^
git reset HEAD~2
Obydwie komendy usuwają ostatnie 2 zmiany z brancha. Im więcej daszków (^) tym więcej commitów zostanie usuniętych.
git rebase -i HEAD~3
Interaktywne zmienianie zawartości, opisów commitów. Commity mozna łączyć wtedy w jeden duży, zmienić jego opis, itd.

Powyższe polecenia stosujemy w terminalu lub wierszu poleceń. Nie oznacza to jednak, że jesteśmy zmuszeni korzystać z GITa w sposób tekstowy. Istnieją różne nakładki graficzne na interfejs GITa, dzięki czemu korzystanie z niego jest przyjemniejsze. Dla systemów Windows istnieją aplikacje: GIT GUI lub aplikacja z GitHuba.

Powyższa lista komend na pewno nie wyczerpuje listy dostępnych komend, ale pozwala w zadowalający sposób pracować z tym system repozytoriów. Jeśli znasz jeszcze inne ciekawe komendy, które można wykorzystać w codziennej pracy, to zapraszam do dzielenia się nimi w sekcji komentarzy.