Peruskäyttö
Repositorion perustaminen
Voit perustaa repositorion hakemistoon, joka ei ole vielä versionhallinnassa, komennolla init
.
Komento luo tyhjän repositorion, johon voit tallettaa versioita. Tiedot tallentuvat alihakemistoon .git
-nimiseen alihakemistoon.
.git
-hakemistosta tunnistat, onko hakemisto Git-versionhallinnassa.
Tiedostot ja hakemistot, joiden nimi alkaa pisteellä, ovat piilotettuja, niitä ei oletusarvoisesti näytetä. Saat piilotetut hakemistot näkyviin ls
-komennon laajentimella -a
. Laajentimella -l
näytetään tiedostojen ja hakemistojen kaikki tiedot.
$ ls -l -a
total 31
drwxr-xr-x 1 h01975 1049089 0 Feb 15 15:04 ./
drwxr-xr-x 1 h01975 1049089 0 Feb 22 15:08 ../
drwxr-xr-x 1 h01975 1049089 0 Feb 15 15:04 .git/
-rw-r--r-- 1 h01975 1049089 81 Feb 15 12:36 .gitattributes
drwxr-xr-x 1 h01975 1049089 0 Feb 15 12:36 .github/
-rw-r--r-- 1 h01975 1049089 490 Feb 15 12:36 .gitignore
-rw-r--r-- 1 h01975 1049089 13 Feb 15 13:42 hello.txt
-rw-r--r-- 1 h01975 1049089 9305 Feb 15 12:36 readme.md
-rw-r--r-- 1 h01975 1049089 29 Feb 15 15:04 time.txt
Jotta piilotetut tiedostot näkyisivät Windowsin tiedostojenhallinnassa, on tiedostojenhallinnan asetuksissa määritettävä piilotetut tiedostot näkyviin.
Repositorion perustaminen toisesta repositoriosta
Usein haluat kopioida olemassa olevan repositoryn ja jatkaa työskentelyä siitä. Tämä tapahtuu komennolla clone
, esim.
Komento lisää nykyiseen hakemistoon alihakemiston libgit2, joka sisältää alkuperäisen repositoryn datan kopion (.git
) sekä uusimman version tiedostot. Se myös konfiguroi alkuperäisen repositoryn uuden repositoryn etärepositoryksi.
Täsä aihetta käsitellään myöhemmin osiossa Hajautettu Git.
Tiedostot Git-hakemistossa
Hakemisto, johon on perustettu Git-repositorio, on Git:n työhakemisto (working set).
Työhakemistossa olevat tiedostot ja alihakemistot ovat otettavissa Git-hallintaan. Tiedostot pitää viedä erikseen Git-hallintaan, jos niiden versioita halutaan hallinnoida.
Git:n näkökulmasta hakemistossa olevat tiedostot voivat Git-termein olla joko
- Tracked (Otettu Git:n hallintaan) tai
- Untracked (Ei Git-hallinnassa).
Git:n hallinnassa oleva työhakemiston tiedosto voi olla
- Unmodified - muuttumaton sama kuin talletettu uusin versio
- Modified – muuttunut, erilainen kuin talletettu uusin versio
- Staged – merkitty otettavaksi seuraavaan talletukseen
Oheinen kuva kuvaa eri tiloja ja niiden välisiä siirtymiä.
- Kun hakemistoon lisätään uusi tiedosto (add the file), se on
untracked
. - Kun hakemiston jo Git-hallinnassa oleva tiedosto muuttuu (edit the file), sen tilaksi tulee
modified
. - Uudet ja muuttuneet tiedostot voidaan merkitä otettavaksi seuraavaan talletukseen toiminnolla
add
(stage the file). Tällöin tiedostot ovat tilassastaged
- Kun talletus (commit) tehdään, kaikki mukaan otettavaksi merkityt tiedostoversiot talletetaan, ja niiden tilaksi tulee
unmodified
.
Työhakemiston tiedostojen Git-tilaa voi tarkastella komennolla status.
Vinkki
Työhakemiston git-tilaa (komento status
) kannattaa tarkastella ennen Git-operaatioita ja niiden jälkeen, niin pysyt aina tilanteen tasalla, mitä repositoriossasi tapahtuu.
Muutosten tallettaminen
Tiedostoversioiden tallettaminen on kaksivaiheinen operaatio.
Vaihe 1: add
Kun tiedosto on valmis talletettavaksi versionhallintaan, uusi tai muutettu tiedosto on merkittävä otettavaksi mukaan seuraavaan talletukseen (commit). Tätä toimintoa kutsutaan Git-terminologiassa nimellä staging, ja se tehdään komennolla add
.
Tiedostot voidaan lisätä seuraavaan talletukseen yksittäin.
Voit myös lisätä koko hakemiston, jolloin kaikki hakemiston tiedostot ja alihakemistot sisältöineen lisätään kerralla. Hakemistot ovat myös tiedostoja, nekin versioituvat.
git add . # piste viittaa nykyiseen hakemistoon, kaikki uudet ja muuttuneet tiedostot otetaan mukaan
Nyt muuttuneet tiedostot ovat valmiita talletettavaksi versionhallintaan. Kuten huomasit, uuden tiedoston tuominen on muutos siinä kuin olemassa olevankin muuttaminen.
Nyt Git on tietoinen, mitä pitää tallentaa, ja ollaan valmiita commit
-toimintoa varten.
Vaihe 2: commit
Varsinainen talletus tapahtuu komennolla commit
.
Komento käynnistää editorin, jolla voit kirjoittaa muutokseen talletettavan kommentin. Kun talletat ja suljet, muutos viedään tietovarastoon.
Kirjaa kommenttiin muutoksen aihe selkeästi, ne ovat tärkeää kommunikaatiota itsellesi ja projektiryhmällesi.
Voit myös kirjata kommentin komentorivillä ilman editoria:
Vinkki
Jos et ollut määritellyt mitään muuta, Git avaa oletusarvoisesti vim
-editorin, joka perehtymättömälle on melko hankala ymmärtää ja käyttää.
vim
editorista pääsee ulos seuraavasti:
- Paina Esc siirtyäksi komentotilaan.
- Anna komento
:wq
tallettaaksesi ja poistuaksesi editorista.
Sen jälkeen voit palata lukuun Git:n käyttöönottoluvun konfigurointi-osioon ja määritellä mieleisesi Git-editorin.
Talletusten tarkastelu
Työtilan muutoksia verrattuna talletettuihin voit tarkastella tutulla komennolla status
. Sitä kannattaa käyttää ahkerasti, jotta pysyt selvillä, mikä on hakemiston ja sen muutosten Git-tila:
Näet commit
-talletusten historian komennolla log
.
Komento listaa kaikki talletukset käänteisessä aikajärjestyksessä. Laajentimella --stat
Git lisää tulostukseen lyhyen yhteenvedon talletusten muutoksista:
Työhakemistossa olevan tiedoston muutoksia verrattuna viimeksi talletettuun versioon voi tarkastella komennolla diff
.
Tiedostojen poistaminen ja siirtäminen
Kuten aiemmin todettiin, hakemistot versioituvat myös. Jos haluat poistaa tiedoston repositoriosta tai siirtää tiedoston toiseen hakemistoon, olet tekemässä uutta versiota hakemistoista.
Git-komento rm
poistaa tiedoston paitsi työhakemistosta myös Git-hallinnasta. Muutos on sen lisäksi talletettava versionhallintaan.
Huomaa, että vanhat talletetut versiot säilyvät versionhallinnassa! Se, mikä on versionhallintaan talletettu, säilyy siellä.
Git-komennolla mv
voi nimeätä tiedoston uudelleen tai siirtää toiseen hakemistoon.
git mv oldname.txt newname.txt
mkdir newdir
git mv newname.txt newdir
git add .
git commit -m "Uudelleenjärjestelty tiedostoja"
Tiedostoja voi poistaa ja siirtää repositorion sisällä käyttöjärjestelmän komennoilla (esim. rm
tai mv
). Muutokset talletetaan Git-hallintaan samalla tapaa kuin mikä tahansa muutos: ensin add
, sitten commit
. Vastaavilla Git-komennoilla ei add
-vaihetta tarvita.
Harjoitus 2
Harjoitellaan perustoimintoja.
Tarkista repositorion tilanne joka välissä komennolla status
. Muista laatia talletuksillesi kuvaava kommenttiviesti!
- Tee koneellesi kurssin harjoituksia varten hakemisto ja perusta sinne Git-repositorio.
- Tee repositorioon tiedosto (esim.
test.txt
) ja kirjoita tiedostoon jotain. Talleta tiedosto Git-hallintaan. -
Tee repositorioon tiedosto
hello.html
. Tiedoston sisältö voi olla esim.Vie nämä muutokset Git-hallintaan.
-
hello.html
-tiedoston sisältö ei vielä ole HTML-koodia. Lisää tekstiin h1-merkkaus, jolloin siitä tulee HTML-elementti:Vie muutos versionhallintaan.
-
Muuta
hello.html
-tiedoston nimeksiindex.html
ja talleta muutos. - Ensimmäisenä luotu test.txt-tiedosto on nyt käynyt tarpeettomaksi. Poista se versionhallinnasta ja talleta muutos. Laadi talletuksellesi kuvaava kommenttiviesti.
- Lisää vielä joitakin tiedostoja ja talleta ne versionhallintaan.
- Tarkastele tekemiäsi talletuksia komennolla
git log
. Kokeile myös komentoa laajentimella--stat
. Mitä lisätietoa saat?
Paluu menneisyyteen
Johdanto-osiossa väitettiin, että versionhallinnan avulla on mahdollista palauttaa ohjelmiston aiempia versioita. Kokeillaan sitä seuraavassa.
Tarkastellaan Git-komennon log
tulostusta:
commit 6fa5fd1b94a163464aaf56a7b69b6f7f4cca429b
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 15:16:39 2024 +0200
Lisätty toinen tiedosto
commit 77d8790ada4aa9ce8e438a360e44657334eeb7d3
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 15:14:41 2024 +0200
Uudelleenjärjestelty tiedostoja
commit 5d565f66349cb8eb1b3550855d89d12496f23a1b
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 15:13:46 2024 +0200
Lisätty tiedosto
commit f78c0a4d638b3c3f3cfb85a2c5e7eba38023d8b3
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 14:57:53 2024 +0200
Ensimmäinen commit
Kun tiedämme tallennuksen tunnisteen, voimme palata sen tilanteeseen komennolla checkout
. Palataan ensimmäisen tallennuksen Ensimmäinen commit tilanteeseen:
$ git checkout f78c0a4
Note: switching to 'f78c0a4'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at f78c0a4 Ensimmäinen commit
Nyt työhakemisto on päivittynyt ensimmäisen talltuksen tilanteeseen, ja hakemistossa on vain sinne ensimmäisenä tehty tiedosto text.txt
.
$ ls -l -a
total 13
drwxr-xr-x 1 h01975 1049089 0 Mar 10 16:17 ./
drwxr-xr-x 1 h01975 1049089 0 Mar 10 13:49 ../
drwxr-xr-x 1 h01975 1049089 0 Mar 10 16:20 .git/
-rw-r--r-- 1 h01975 1049089 17 Mar 10 15:00 test.txt
Komennon ilmoitus kertoo, että olemme detached HEAD-tilassa. Se tarkoittaa, että jos teemme muutoksia, ne eivät tule tallettumaan mihinkään haaraan, jolloin ne eivät näkyisi versiohistoriassa. Käytännössä tässä tilassa ei kannata tallettaa muutoksia.
Takaisin nykytilaan päästään esimerkiksi Git:n antaman neuvon mukaisesti:
Siihen, mistä tässä on kyse ja miten kannattaa toimia, palataan myöhemmin osiossa Haarat.
Vinkki
Git neuvoo sinua aina, kun teet jonkin toimenpiteen.
Ilmoituksia kannattaa lukea ja yrittää tulkita. Ongelmatilanteissa sen ehdotukset usein ohjaavat oikeaan suuntaan.
Oho! Eiku…
Versionhallintatoimintojen kanssa voi helposti tulla erehdyksiä. Hätä ei kuitenkaan ole tämännäköinen, kaikki on oikaistavissa. Tässä joitakin peruutusohjeita.
add
-komennon peruuttaminen
Jos lisäsit seuraavaan talletukseen tiedoston, joka ei sinne kuuluisi, voit peruuttaa lisäyksen komennolla reset
.
Jos et anna parametria, kaikki lisätyt tiedostot poistetaan seuraavasta tallennuksesta.
Komento ei poista tai muuta tiedostoja, vain muuttaa tiedostojen tilan talletuksen suhteen.
Työtilaan tehtyjen muutosten peruuttaminen ennen talletusta
Jos haluat peruuttaa työtilassa tekemäsi muutokset, joita ei vielä ole talletettu versionhallintaan, voit palauttaa tiedoston versionhallinnan tuoreimman version tasalle komennolla restore
:
Varoitus
Huomaa, että tässä tapauksessa tekemästi muutokset häviävät eivätkä ne ole palautettavissa. Vain talletetut versiot voidaan palautettaa.
Jos haluat peruuttaa kaikki työtilaan tekemäsi muutokset, se onnistuu komennolla git reset --hard
. Käytä sitä vain, kun olet varma, että haluat hylätä kaikki tekemästi muutoksiet
Talletettujen muutosten peruminen
Jos olet tallettanut muutoksen versionhallintaan, muutokselle on jo luotu tunniste ja siitä on talletettu kaikki tiedot. Jos sitä muutettaisiin, jouduttaisin peukaloimaan repositorion versiohistoriaa.
Talletetun muutoksen poistaminen ei oikeastaan edes ole järkevää. Sen sijaan että yrittäisit muuttaa historiaa, voit tehdä uuden muutoksen, jossa väärä muutos korjataan.
Yksi ylimääräinen talletus ei haittaa, ja korjaus on täysin riskitön. Historian muuttaminen sen sijaan olisi riskialtista, se voisi aiheuttaa monin verroin suurempia ongelmia kuin ylimääräinen talletus.
Voit peruuttaa kokonaisen talletuksen tekemällä "anti-talletuksen" Git-komennolla revert
. Komento tekee muutoksen, joka peruuttaa sille parametrina annetun talletuksen kokonaan.
$ git log -2 # näyttää kaksi viimeisintä talletusta
commit 4a731586b83b6c1469416a489e5da1a4560707d4 (HEAD -> master)
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 16:58:47 2024 +0200
Lisätty log-tiedosto
commit 21f29c9814e6f101319edc51a199b2d62eb97fae
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 15:19:32 2024 +0200
Siirrelty taas tiedostoja
$ git revert 4a73158
[master 83e809b] Revert "Lisätty log-tiedosto"
1 file changed, 53 deletions(-)
delete mode 100644 log.txt
$ git log -2
commit 83e809b0dd28076a423d916229567e61f8f44043 (HEAD -> master)
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 16:59:26 2024 +0200
Revert "Lisätty log-tiedosto"
This reverts commit 4a731586b83b6c1469416a489e5da1a4560707d4.
commit 4a731586b83b6c1469416a489e5da1a4560707d4
Author: Ruonavaara Markku <markku.ruonavaara@haaga-helia.fi>
Date: Sun Mar 10 16:58:47 2024 +0200
Lisätty log-tiedosto
revert
peruuttaa yhden talletuksen kerrallaan. Jos haluat peruuttaa useampia talletuksia, jokainen pitää peruuttaa yksi kerrallaan.
Muista, että kaikki, mikä on versionhallintaan talletettu, on palautettavissa. Siksi commit
-talletuksia kannattaa tehdä usein.
Harjoitus 3
Harjoitellaan peruuttelua.
-
Tee repositorioosi useita muutoksia: muuta talletettuja tiedostoja ja lisää uusia tiedostoja. Älä talleta!
-
Kokeile
add
-toiminnon peruuttamista.- Lisää muutokset seuraavaan talletukseen (
add
). - Poista muutoksia yksittäin seuraavasta talletuksesta.
- Poista kaikki loput muutokset seuraavasta talletuksesta.
- Sinulla pitäisi nyt olla työtilassa useita tallettamattomia muutoksia, joista mikään ei ole menossa seuraavaan talletukseen.
- Lisää muutokset seuraavaan talletukseen (
-
Kokeile työtilaan tehtyjen muutosten peruuttamista. Tarkista tilanne joka välissä komennolla
status
.- Peruuta jonkin talletetun tiedoston muutokset työtilasta.
- Poista kaikki loput muutokset työtilasta.
- Mitä tapahtui uusille untracked-tilassa oleville tiedostoille?
-
Kokeile talletuksen peruuttamista.
- Tee useita muutoksia ja talleta ne.
- Peruuta talletus komennolla
revert
. - Mitä näyttää komento
log
?