piotrkabacinski
8/25/2016 - 3:45 PM

git prezentacja efi camp

git prezentacja efi camp

Efi Camp 2017: git tutorial

UWAGA: Poniższy tutorial odbywa się w środowisku lokalnym, w związku z czym nie używana jest komenda git push, która wystepowałaby w przypadku pracy ze zdalnym serwerem.

W przykładach używana jest komenda vim inicjująca edytor tekstu VIM, nie jest on wymagany, można w tym miejscu użyć dowolnego innego (np. Sublime, Atom).

Branch, checkout

Przygotowanie nowego odgałęznia (branch), przełączenie się między odgałęzieniami.

git init # Inicjujemy nowe repozytorium

touch .gitignore # Tworzymy plik z listą pomijanych plików/lokalizacji
vim .gitignore # Edytujemy i zapisujemy plik

touch hello.md # Stwórz plik
vim hello.md # Edytuj plik przy pomocy edytora VIM. Można użyć każdego innego
cat hello.md # Podglądamy treść nowozapisanego pliku
git add .
git commit -m "hello.md init"

# Tworzymy nowe odgałęzienie projektu

git branch # Pokaż aktualne branche (odgałęzienia)
git branch development # Stwórz branch "development"
git checkout development # Przełączamy się na branch "development"

cat hello.md # Podglądamy treśc pliku
vim hello.md # Edytujemy pierwszą linijkę
git add .
git commit -m "Lorem ipsum"

Scalanie

Scalanie (merge) branchy i zasumulowanie konfliktu podczas scalania odgałęzień.

git checkout master
vim hello.md # Modyfikujemy i commitujemy plik
git add .
git commit -m "One, two, three"
git merge development # Pojawia się konflikt! Plik hello.md został edytowany na branchu master i development w tym samym miejscu. Edytujemy plik hello.md i commitujemy preferowaną wersję
git add .
git commit -m "Merge conflict fix"
git merge development # Sprawdzamy czy obydwa branche są "up to date"

Blame, log, diff

Uzyskiwanie podstawowych informacji o historii edycji.

git blame hello.md # Pokaż kto edytował, którą linijkę w aktualnej wersji pliku

git log # Wyświetl listę commitów
git log --author="Piotr Kabacinski" # Filtruj po autorze
git log -- hello.md # Filtruj po pliku
git log --oneline # Pokaż commity w formacie <commit id> <message>

git diff c7ee14..96c088 # Pokaż różnice między dwoma commitami

Checkout, revert, stash

Cofanie się w historii, usuwanie zcommitowanych zmian i zapisywanie w gitowym "schowku".

git checkout c7ee14 # Przeskakujemy do stanu commitu c7ee14
git checkout master # Wracamy do aktualnego stanu (będąc na branchu master)

git stash # Zapisz w schowku niezcommitowane jeszcze zmiany
git stash list # Wyświetl listę zapisanych zmian
git stash apply # Przywróć ostatnie zapisane dane ze schowka

vim hello.md # Edytujemy plik o "niechcianą" treść
git add .
git commit -m "Bezsensowny commit"
git log --oneline
git revert c7ee14 # Cofamy zmiany z commitu "Bezsensowny commit"

# W przypadku np. konfliktu, rozwiązujemy go oraz commitujemy zmianę
git add .
git commit # Commitujemy wersję z cofniętymi zmianami

Cherry-pick

Scalanie commitu z innego odgałęzienia.

git checkout development
touch cherry.md
vim cherry.md # Edytujemy treść pliku
git add cherry.md
git commit -m "cherry.md init"
git log # Kopiujemy id commitu "cherry.md init"

git checkout master
git cherry-pick 11bb98f
ls -la
git log

Nauka:

Warto znać:

  • git reset (--hard) # resetuj wersje plików do ostatniego lub wybranego commitu (HEAD)
  • git rebase # zmiana bazowego commitu
  • git checkout <branch> <path/to/file.ext> # Kopiuj wersje pliku z innego brancha
  • git status # Aktualny stan zmian
  • gitk # Przeglądarka repozytorium

Warto mieć:

  • Sourcetree - GUI klient Git
  • Melde - Narzędzie wspomagające proces mergowania
# Pomijanie plików/lokalizacji podczas śledzenia zmian
# https://github.com/github/gitignore - A collection of .gitignore templates

# OS generated files #
.DS_Store*
ehthumbs.db
Thumbs.db
.idea

# Packages #
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
*.log
*.sqlite
*.js.map

# NPM #
pids
logs
results
npm-debug.log

# Directories #
node_modules/
.sass-cache/
jspm_packages/

# Images #
*.psd
*.ai
*.bmp