środa, 25 grudnia 2013

Git - podręczne komendy


W poście tym znaleźć można zbiór podstawowych komend wykorzystywanych podczas pracy z systemem Git.

Doskonałym źródłem informacji na temat Gita jest książka Pro Git

Inne publikacje:
Zbiór komend na GitHub,
Artykuł Mariusza Nosińskiego (podstawy),
Książka "Git.Rozproszony system kontroli wersji" Włodzimierza Gajdy, wyd. Helion,
Książka "Git" na Wikibooks,
Książka "Git Magic" aut. Ben Lynn.

UWAGA! Post jest systematycznie uaktualniany.


Globalna konfiguracja przed pierwszym użyciem polega na dodaniu nazwy użytkownika oraz jego adresu e-mail:
git config --global user.name "hexen2k"
git config --global user.email "hexen2k@gmail.com"

Inicjalizacja repozytorium:
git init
Dodanie pliku do poczekalni (inna spotykana nazwa: indeksu). Dzięki temu zmiany są monitorowane przez Gita:
 git add nazwa_pliku
Indeksacja wszystkich plików (nowe, zmodyfikowane, usunięte):
git add -A 
Indeksacja nowych plików (bez dodawania plików zmodyfikowanych oraz usuniętych):
git add .
Indeksacja plików śledzonych (zmodyfikowanych lub usuniętych). Pomija pliki nowe:
git add -u



Usunięcie pliku z dysku oraz poczekalni:
git rm nazwa_pliku
Usunięcie pliku z poczekalni. Zakończenie śledzenia pliku:
git rm --cached nazwa_pliku 
Zmiana nazwy pliku (fizycznie na dysku oraz w indeksie):
git mv nazwa_przed nazwa_po 

Tworzenie nowego commita w aktualnie rozwijanej gałęzi:
 git commit -m 'opcjonalny komentarz'
gdzie opcjonalny parametr -m pozwala określić komentarz do commita. W przypadku jego braku wyświetli się okno edytora tekstowego z możliwością edycji komentarza.

Tworzenie commita z pominięciem poczekalni:
git commit -a
polecenie nie dodaje do commita plików nie śledzonych. Należy dodać je ręcznie poleceniem git add. Można także wykorzystać jeden z dwóch sposobów:
git add -A
git commit -m "opis"
lub
git add .
git commit -a -m "opis"

Poprawienie ostatniego commita (nowym):
git commit --amend
Ten sam cel można osiągnąć w nieco inny sposób:
git reset --soft HEAD~1 (usuwa ostatni commit bez kasowania plików)
git commit -m 'nowy komentarz'
 UWAGA! Używanie komend jest bezpieczne jedynie podczas zmian lokalnych - więcej szczegółów. Po wysłaniu commita na serwer i udostępnieniu pozostałym uczestnikom projektu nie można modyfikować commitów (chodzi o spójność danych między wszystkimi uczestnikami projektu).

 Plik z listą plików ignorowanych przez Gita:
.gitignore

Wyświetlanie statusu zmian w śledzonych plikach.
git status
wersja kompaktowa:
git status -sb

Cofnięcie operacji dodania pliku do poczekalni:
git reset HEAD nazwa_pliku
Przywrócenie pliku w obszarze roboczym do ostatniej wersji z poczekalni (jeśli nie było żadnych zmian to pobierana jest wersja pliku z ostatniego commita):
git checkout -- nazwa_pliku
dwie kreseczki są potrzebne do odróżnienia polecenia od zmiany branchy (np. git checkout testing).

Przywrócenie pliku do wersji z określonego commita:
git checkout nazwa_commita nazwa_pliku





Wyświetlenie listy commitów:
git log
Wyświetlenie listy commitów w jednej linii:
git log --pretty=oneline 
Wyświetlenie listy commitów w jednej linii z 7 pierwszymi znakami identyfikatora SHA:
git log --pretty=oneline --abbrev-commit

Wyświetlenie listy commitów tylko aktywnej gałęzi:
git log --first-parent

Wyświetlanie wszystkich tagów:
git tag
Tagowanie ostatniego commita (tag lekki):
git tag nazwa_tagu 
Usunięcie tego tagu:
git tag -d nazwa_tagu 
Rozszerzony tag (opisowy) - nazwa i dłuższy komentarz do niego:
git tag -a nazwa_tagu -m 'Dłuższy komentarz opisujący nazwa_tagu'  
Etykietowanie wcześniejszych wersji commitów (opisowy, lekki):
git tag -a nazwa_tagu skrocona_suma_kontrolna_commita -m 'komentarz do tagu opisowego' 
git tag nazwa_tagu skrócona_suma_kontrolna 
Wyświetlanie wszystkich branchy:
git branch -v 
bez parametru -v wyświetli listę bez ostatnio zatwierdzonych zmian (komentarzy) i skróconych SHA1.

Tworzenie nowego brancha (na aktywnej gałęzi):
git branch nowy_branch 
Tworzenie nowego brancha na innym commicie/gałęzi:
git branch nowy_branch stary_branch

 Przełączanie brancha:
git checkout nazwa_brancha
 Tworzenie brancha i natychmiastowe przełączenie się na niego:
git checkout -b nowy_branch
Mergowanie (łączenie) branchy. Będąc np. na gałęzi master dołączamy do niej gałąź testing:
git merge testing
Usunięcie zbędnego brancha po dołączeniu np. do brancha mastera:
git branch -d nazwa_zbędnego_brancha
Jeśli branch nie był mergowany usunięcie należy wymusić:
git branch -D nazwa_zbędnego_brancha
Usunięcie ostatniego commita w aktywnym branchu:
git reset --soft HEAD~1 (bez kasowania zmian)
git reset --hard HEAD~1 (kasuje wszystkie zmiany)

Wyświetlenie zmian w śledzonych plikach - między poczekalnią a aktualnymi zmianami (inaczej - co zostało zmienione (dotyczy tylko plików śledzonych) ale nie wysłane do poczekalni):
git diff
Wyświetlenie zawartości poczekalni, która zostanie wysłana w następnym commicie:
git diff --cached 

Wyświetlenie wszystkich zmian w śledzonych plikach od danego commita (np. ostatniego jeśli podamy HEAD):
git diff nazwa_commita
polecenie to łączy wynik komendy git diff oraz git diff --cached.

Zmiany między commitami:
git diff nazwa_commita nazwa2_commita
Między dwoma ostatnimi commitami:
git diff HEAD^ HEAD
Przywrócenie plików w obszarze roboczym do wersji z ostatniego Commita (UWAGA! ostrożnie - można przypadkowo skasować dane):
git reset --hard
git reset --hard HEAD 
Jeśli w folderze znajdowały się nowo utworzone pliki, których chcemy się w tym momencie pozbyć, musimy skasować wszystkie pliki z obszaru roboczego i wykonać powyższe polecenie.


Repozytoria zdalne. 
Opis pochodzi z portalu Bitbucket (pojawia się po założeniu nowego repo):

zaczynam od zera:
Set up your local directory

Set up Git on your machine if you haven't already.
mkdir /path/to/your/project
cd /path/to/your/project
git init
git remote add origin git@bitbucket.org:hexen2k/nazwanowegorepo.git

Create your first file, commit, and push

echo "hexen2k" >> contributors.txt
git add contributors.txt
git commit -m 'Initial commit with contributors'
git push -u origin master



mam istniejący projekt:
cd /path/to/my/repo
git remote add origin git@bitbucket.org:hexen2k/nazwanowegorepo.git
git push -u origin --all # pushes up the repo and its refs for the first time
git push -u origin --tags # pushes up any tags

Gdzie: hexen2k to nawa użytkownika, nazwanowegorepo to nazwa nowo utworzonego repozytorium za pomocą strony www.