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.

  • Myślę, że warto dodać polecenie git merge do Twojej listy 🙂

  • Snajperov

    ciezko polemizowac ze lista przydanta, ale na litosc boska. comitA? z rodzaju meskiego sie nagle damski zrobil? Panie, dzieki za liste, ale grafomania nie przebiera.
    Masz jak wół commit od commitment. Napisalbys gdzies commitmenta? Oczy krwawia.
    Przeczytaj tekst zanim cos… scom(Pr0)mitujesz na blog