Git

Perusworkflow

git status
git add tiedosto
git commit -m "Viesti"
git push
git pull

Alustus ja kloonaus

git init
git clone git@github.com:org/repo.git
git clone --depth 1 git@github.com:org/repo.git   # pinnallinen kloonaus

Haarat

git branch                  # listaa haarat
git switch -c uusi-haara    # luo ja vaihda uuteen haaraan
git switch main             # vaihda haaraan
git merge ominaisuus         # yhdistä haara nykyiseen
git branch -d haara          # poista yhdistetty haara
git branch -D haara          # poista pakolla

Historia ja muutokset

git log --oneline
git log --all --graph --oneline   # visuaalinen haarahistoria
git log -- tiedosto                # tiedoston historia
git blame tiedosto                 # kuka muutti minkäkin rivin
git diff                    # tallentamattomat muutokset
git diff --staged           # stagetut muutokset
git show <commit>

Perumiset

Komento Kuvaus
git restore tiedosto Kumoa tallentamattomat muutokset tiedostoon
git restore --staged tiedosto Poista tiedosto stagelta
git reset --soft HEAD~1 Peru viimeinen commit, säilytä muutokset stagettuna
git reset --mixed HEAD~1 Peru commit, säilytä muutokset stagettamattomana
git reset --hard HEAD~1 Peru commit ja hylkää muutokset kokonaan
git revert <commit> Tee uusi commit, joka kumoaa toisen (turvallinen jaetulle haaralle)
git reflog Näytä HEAD:n liikkeet — pelastusrengas väärän resetin jälkeen

Rebase ja historian siistiminen

git rebase main                    # siirrä haaran commitit mainin päälle
git rebase -i HEAD~3                # muokkaa/yhdistä 3 viimeistä commitia
git cherry-pick <commit>            # tuo yksittäinen commit toisesta haarasta
git commit --amend                  # muokkaa viimeisintä committia

Älä rebasea haaraa, jota muut jo käyttävät — historian uudelleenkirjoitus rikkoo heidän kloonauksensa.

Etärepot

git remote -v
git remote add origin git@github.com:org/repo.git
git fetch                   # hae muutokset ilman yhdistämistä
git push -u origin haara     # pushaa ja aseta seurattava haara
git push --force-with-lease  # turvallisempi force-push (tarkistaa etätilan)

Stash

git stash            # laita muutokset syrjään väliaikaisesti
git stash pop         # palauta viimeisin ja poista pino
git stash list        # listaa kaikki tallennetut
git stash apply stash@{1}   # palauta tietty, älä poista pinosta

Vianetsintä

git bisect start
git bisect bad                # nykyinen commit on viallinen
git bisect good v1.0          # tämä vanha commit toimi
# git testaa binäärihaulla väliin jääviä commiteja, merkitse jokainen
# `git bisect good` tai `git bisect bad`, kunnes syyllinen löytyy
git bisect reset

Alimoduulit ja worktreet

git submodule add git@github.com:org/kirjasto.git polku/kirjasto
git submodule update --init --recursive

git worktree add ../toinen-haara haara-nimi   # toinen työhakemisto samasta repostä

Tägit

git tag v1
git tag -a v1 -m "Ensimmäinen julkaisu"   # annotoitu tägi
git push --tags

.gitignore ja siivous

# .gitignore-esimerkki: tiedostot/kansiot, joita git ei koskaan seuraa
*.log
build/
!build/pidettava.txt   # huutomerkki = poikkeus säännöstä
git clean -n     # näytä mitä poistettaisiin (kuivaharjoittelu)
git clean -fd     # poista seuraamattomat tiedostot ja kansiot

Hyödyllisiä aliaksia

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.lg "log --oneline --graph --all"