
Versionsstyring med Git
==== Læringsmål ====
Du skal kunne:
- Forklare forskellen på ''git restore'', ''git reset'' og ''git revert''.
- Anvende hver kommando i praksis i et lille Git-projekt.
- Vælge den rigtige kommando i den rigtige situation.
- Forstå hvilke kommandoer der er sikre i et delt repository.
==== Teori ====
=== git restore ===
* Fortryder ændringer i arbejdsfiler før commit.
* Historikken ændres ikke.
* Bruges til at gendanne sidst gemte version.
=== git reset ===
* Flytter projektets lokale historik til en tidligere commit.
* Kan slette commits lokalt.
* Ikke sikkert ved samarbejde.
=== git revert ===
* Laver en ny commit, der fortryder en tidligere commit.
* Ændrer ikke historikken.
* Den anbefalede metode i samarbejdsprojekter.
==== Git: restore, reset og revert — Forklaring + Øvelser ====
Forestil dig, at Git er et skrivebord, hvor du arbejder på filer.\ Noget er kladde (working directory), noget er klar til commit (staging), og noget er gemt i historikken (commits).\ Nogle handlinger er lokale og ufarlige, andre kan være problematiske i samarbejde.
=== git restore ===
"Fortryd kladde"
Bruges til at fortryde ændringer i arbejdsfiler, før du har lavet commit.
- Du har ændret filer, men ikke committet dem.
- ''git restore'' betyder: “Gå tilbage til sidste gemte version.”
- Historikken ændres ikke.
Billede i hovedet:
Du har tegnet på et papir, men fortryder tegningen → du smider papiret ud og tager en ny kopi fra skuffen.
=== git reset ===
"Ryd skrivebordet (lokalt)"
Bruges til at spole projektet tilbage i historikken – men kun lokalt.
Derfor ikke sikkert ved samarbejde.
- Du går tilbage til en tidligere commit.
- Commits efter denne fjernes fra din lokale historik.
- Kan også fjerne filer fra staging.
Billede i hovedet:
Du har lavet tre tegninger (commits). Du vil slette de to sidste → du river dem ud af din egen mappe.
Andres mapper ændres ikke.
=== git revert ===
"Annullér i historikken (sikkert ved samarbejde)"
Bruges til at lave en ny commit, der fortryder en tidligere commit – uden at ændre historikken.
- Den laver en slags "mod-commit".
- Den sikre måde at fortryde på i et delt repository.
Billede i hovedet:
Du har tegnet en streg i mappen. I stedet for at rive siden ud, laver du en ny tegning, hvor du visker stregen ud.
Alle kan se, hvad der er sket.
==== Kort opsummering ====
^ Kommando ^ Betydning ^ Hvornår bruges det? ^ Sikkert i samarbejde? ^
| git restore | Fortryd kladde | Når du vil tilbage til sidste gemte version | Ja |
| git reset | Ryd skrivebord (lokalt) | Når du vil spole din lokale historik tilbage | Nej |
| git revert | Annullér i historikken | Når du vil fortryde en delt commit | Ja |
==== Checkpoints ====
Du skal kunne:
- Forklare forskellen på restore/reset/revert.
- Vide hvornår man ikke må bruge ''reset''.
- Gendanne en fil der er ændret men ikke committet.
- Lave et mod-commit der fortryder en fejl.
- Vide hvordan man arbejder sikkert med delt historik.
==== Øvelse 1 – "Fortryd kladde" med git restore (nem) ====
Formål: Lære at gendanne ændrede filer før commit.
Trin:
- Opret en mappe og kør ''git init''.
- Opret ''tekst.txt'' med indholdet:
* ''Dette er version A''
- Commit filen.
- Ændr filen til:
* ''Dette er version B''
- Kør: ''git restore tekst.txt''
Forventet resultat:
Filen viser igen "Dette er version A".
Checkpoints:
* Hvad sker der hvis "version A" ikke var committet?
* Ændrer restore historikken?
==== Øvelse 2 – "Ryd skrivebordet" med git reset (mellem) ====
Formål: Forstå soft/mixed/hard reset uden at ødelægge remote.
Trin:
1. Opret et repo uden remote.
2. Lav tre commits: "A", "B", "C".
3. Kør ''git log --oneline'' og noter id for "B".
4. Kør: ''git reset --hard
Forventet resultat:
* Commit "C" forsvinder lokalt.
* Projektet matcher commit "B".
Checkpoints:
* Hvorfor må man ikke køre ''reset --hard'' i delt repo?
* Hvad er forskel på ''--soft'', ''--mixed'' og ''--hard''?
==== Øvelse 3 – "Fortryd i historikken" med git revert (svær) ====
Formål: Forstå hvordan man fortryder en commit uden at ændre historikken.
Trin:
1. Lav commit 1: opret ''tal.txt'' med tallet ''1''.
2. Lav commit 2: skift tallet til ''2''.
3. Se loggen: ''git log --oneline''
4. Revert commit 2:
''git revert
Forventet resultat:
* Ny commit: "Revert
* Filen viser igen 1
Checkpoints:
* Hvorfor er revert sikker i samarbejde?
* Hvad ville der ske hvis man brugte reset i stedet?
==== Øvelse 4 – Case: "Git-katastrofen" (team-øvelse) ====
Scenarier (vælg 1):
* En elev har ændringer der skal fortrydes → brug ''restore''.
* En elev har lavet commits lokalt → brug ''reset'' (uden push).
* En elev har pushed en fejl → brug ''revert''.
Succeskrav:
* Repo ender i korrekt tilstand.
* Remote-historik er bevaret.
* Gruppen forklarer deres valg korrekt.
==== Mini‑quiz ====
- Hvilken kommando ændrer ikke historikken?
- Hvilken kommando er sikker i samarbejde?
- Hvad gør ''git reset --hard'' ved dit working directory?
- Kan ''git restore'' gendanne en fil uden at ændre historikken?
- Hvad er forskellen på at fjerne en commit vs. at modvirke den?
++++ Hint |
Facit:
1) restore, 2) revert, 3) overskriver tilstand, 4) ja, 5) reset fjerner lokalt – revert skaber et ekstra mod-commit.
++++
[[{}git:git_forloeb|Til oversigt]]