git prezentacja efi camp
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).
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 (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"
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
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
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ć:
# 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