Tilbageførsel af en Specifik Commit
git revert
Som tidligere nævnt bruges kommandoen git revert
til at fortryde en specifik commit. Denne kommando opretter en ny commit, der ophæver de ændringer, som den angivne commit har indført. Den grundlæggende syntaks er som følger:
git revert <commit-hash>
Som det fremgår, skal man nu angive hash for en bestemt commit (commit ID), som man ønsker at fortryde (erstat <commit-hash>
med en gyldig hash), i stedet for at bruge HEAD som ved fortrydelse af den seneste commit.
Mere om hashes
Husk, hver commit har sit unikke ID, som i bund og grund er en streng af cifre (0-9) og bogstaver (a-f), altså en hexadecimal streng. Denne 40-tegns streng kaldes en hash. Lad os se på vores seneste commit:
Her er dens hash:
1b00736255dca7d78659a9971d0c30fba0eb3075
Du vil have en anden hash for denne commit af den nedenfor forklarede årsag.
Commit-hashen beregnes ved hjælp af SHA-1-algoritmen baseret på følgende oplysninger:
- Commit-besked;
- Dato;
- Forfatter;
- Snapshot af working tree;
- Hash af parent commit (eller commits, hvis der er mere end én parent).
Hvis committet er det første i repositoryet, beregnes parent commit-hashen tilsyneladende ikke.
Da al denne commit-information bruges til at beregne dens hash, sikrer brugen af hashes som commit-ID'er konsistensen af repositoryet. Desuden er sandsynligheden for, at to forskellige commits har samme hash (sandsynligheden for kollision) ekstremt lav, så det er meget usandsynligt, at det sker tilfældigt.
Grundlæggende betyder det, at hvis noget ændres i committet, ændres dets hash også. Det betyder, at hvis dataene bliver korrupte af en eller anden grund, kan Git bruge hashen til at identificere dette.
Når en commit ændres, ændres commit-ID'et, hvilket er grunden til, at det er bedre ikke at bruge kommandoen git commit --amend
, når der arbejdes med eksterne repositories.
Eksempel på arbejdsgang
Før vi beslutter, hvilken commit der skal fortrydes, lad os se på de fire seneste commits:
Vi kan se, at der er en commit, hvor vi tilføjede filen recipe.txt
. Lad os fortryde denne commit ved at oprette en ny commit, som vil annullere disse ændringer og i praksis slette filen. I mit tilfælde er dens hash følgende:
043b634d76a7a7744757350512b6367417c29e0
Din hash for denne commit vil dog være anderledes. Vi kan nu fortryde denne commit:
Erstat denne hash med din hash.
Endnu en gang åbnes standardteksteditoren med standard commit-besked til tilbageførsel. Vi lader den være uændret.
Dernæst lukkes teksteditoren korrekt, og ændringerne i denne seneste commit vises:
7 sletninger fandt sted, hvilket betyder, at alle 7 linjer i filen blev slettet. Lad os nu bekræfte, at selve filen blev slettet ved at liste alle ikke-skjulte filer og mapper i vores projektmappe:
Vi har med succes slettet filen recipe.txt
.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
What happens if I revert a commit that is not the latest one?
Can I revert multiple commits at once?
What should I do if I get a merge conflict during revert?
Awesome!
Completion rate improved to 3.57
Tilbageførsel af en Specifik Commit
Stryg for at vise menuen
git revert
Som tidligere nævnt bruges kommandoen git revert
til at fortryde en specifik commit. Denne kommando opretter en ny commit, der ophæver de ændringer, som den angivne commit har indført. Den grundlæggende syntaks er som følger:
git revert <commit-hash>
Som det fremgår, skal man nu angive hash for en bestemt commit (commit ID), som man ønsker at fortryde (erstat <commit-hash>
med en gyldig hash), i stedet for at bruge HEAD som ved fortrydelse af den seneste commit.
Mere om hashes
Husk, hver commit har sit unikke ID, som i bund og grund er en streng af cifre (0-9) og bogstaver (a-f), altså en hexadecimal streng. Denne 40-tegns streng kaldes en hash. Lad os se på vores seneste commit:
Her er dens hash:
1b00736255dca7d78659a9971d0c30fba0eb3075
Du vil have en anden hash for denne commit af den nedenfor forklarede årsag.
Commit-hashen beregnes ved hjælp af SHA-1-algoritmen baseret på følgende oplysninger:
- Commit-besked;
- Dato;
- Forfatter;
- Snapshot af working tree;
- Hash af parent commit (eller commits, hvis der er mere end én parent).
Hvis committet er det første i repositoryet, beregnes parent commit-hashen tilsyneladende ikke.
Da al denne commit-information bruges til at beregne dens hash, sikrer brugen af hashes som commit-ID'er konsistensen af repositoryet. Desuden er sandsynligheden for, at to forskellige commits har samme hash (sandsynligheden for kollision) ekstremt lav, så det er meget usandsynligt, at det sker tilfældigt.
Grundlæggende betyder det, at hvis noget ændres i committet, ændres dets hash også. Det betyder, at hvis dataene bliver korrupte af en eller anden grund, kan Git bruge hashen til at identificere dette.
Når en commit ændres, ændres commit-ID'et, hvilket er grunden til, at det er bedre ikke at bruge kommandoen git commit --amend
, når der arbejdes med eksterne repositories.
Eksempel på arbejdsgang
Før vi beslutter, hvilken commit der skal fortrydes, lad os se på de fire seneste commits:
Vi kan se, at der er en commit, hvor vi tilføjede filen recipe.txt
. Lad os fortryde denne commit ved at oprette en ny commit, som vil annullere disse ændringer og i praksis slette filen. I mit tilfælde er dens hash følgende:
043b634d76a7a7744757350512b6367417c29e0
Din hash for denne commit vil dog være anderledes. Vi kan nu fortryde denne commit:
Erstat denne hash med din hash.
Endnu en gang åbnes standardteksteditoren med standard commit-besked til tilbageførsel. Vi lader den være uændret.
Dernæst lukkes teksteditoren korrekt, og ændringerne i denne seneste commit vises:
7 sletninger fandt sted, hvilket betyder, at alle 7 linjer i filen blev slettet. Lad os nu bekræfte, at selve filen blev slettet ved at liste alle ikke-skjulte filer og mapper i vores projektmappe:
Vi har med succes slettet filen recipe.txt
.
Tak for dine kommentarer!