Git: Hvordan tvinger jeg Git til at overskrive lokale filer?
Når du arbejder med Git og skal opdatere dit lokale repository med ændringer fra fjernserveren, kan du nogle gange stå i en situation, hvor du vil tvinge Git til at overskrive dine lokale filer og sikre, at din branch matcher den fjernbetjente version 100%. Det kan gøres på flere måder, og her er nogle måder at gøre det på.
Nulstil din lokale branch så den matcher main branch
For at hente ændringer fra main-branch i et Git-projekt og overskrive alle lokale filer med de nyeste ændringer fra main, kan du bruge følgende kommandoer. Det er ikke nødvendigt at køre git pull først, når du bruger kombinationen af git fetch og git reset –hard origin/main. Kommandoerne fungerer sammen og opnår samme effekt som git pull, men på en mere kontrolleret måde. Brug
git fetch origin main
git reset --hard origin/main
git fetch origin main: Henter de nyeste ændringer fra main-branchen på fjernserveren.
git reset –hard origin/main: Nulstiller dit lokale repository (inkl. dit arbejdsområde) til at matche
Alle lokale ændringer vil gå tabt, inklusive ændringer, der endnu ikke er tilføjet eller committet. Sørg for, at man er klar til at miste ændringerne, før du kører disse kommandoer.
Alternativ: Tag backup, før du overskriver:
Hvis du vil tage backup af dine ændringer, før du overskriver, kan du stashe dem:
git stash save "Backup før overskrivning"
Senere kan du gendanne ændringerne med:
git stash apply
Ryd uversionerede filer (valgfrit):
Hvis der er uversionerede filer (filer, som ikke er under versionskontrol), kan du rydde dem med følgende kommando. Det er dog valgfrit om du har behov for at fjerne filer som ikke er versioneret.
git clean -fd
-f: Tvinger kommandoen til at udføre oprydning.
-d: Fjerner også uversionerede mapper.
Hvorfor ikke git pull?
git pull kombinerer fetch og merge: Når du kører git pull, henter det ændringer fra fjernserveren og forsøger automatisk at flette dem ind i din aktuelle branch.
Kommandoen kan opsummeres i to trin:
Fetch: Henter de seneste ændringer fra fjernserveren.
Merge: Fletter de hentede ændringer ind i din lokale branch.
Dette gør git pull til en hurtig måde at holde din kodebase opdateret, men det kan nogle gange føre til konflikter, hvis du vil overskrive dine lokale ændringer uden at flette, er git reset –hard origin/main derfor mere passende, fordi det direkte nulstiller din branch til at matche fjernserveren.
Hvorfor ikke bare git pull med –hard?
Selvom du teknisk kunne bruge git pull med –hard som en genvej, anbefales det sjældent, da det kan føre til utilsigtede resultater, især hvis der opstår konflikter. fetch + reset giver dig mere kontrol over, hvad der sker.
Ekstra tip: én-liners reset version
Hvis du er sikker på, at du ikke har brug for nogen lokale ændringer, kan du bruge denne én-liners version. Dette sikrer, at du altid har en opdateret kopi af main fra fjernserveren uden risiko for konflikt.
git fetch origin main && git reset --hard origin/main
Den virker ikke med git fetch origin main, skal jeg bruge git fetch origin master?
Ældre projekter: Repositories, der blev oprettet før 2020, bruger typisk “master”, medmindre det er blevet ændret manuelt.
Nye projekter: Repositories oprettet med nyere versioner af Git bruger “main” som standardnavn.
Hvordan kan man finde ud af, hvad branchen hedder?
Når du kloner et repository, kan du se standardbranchen ved at køre følgende kommando. Her vil den aktive branch (ofte standarden) være markeret med en stjerne (*).
git branch -a
Min standard branch hedder master, hvilken kommando skal jeg kører?
Hvis din standard branch hedder master, så skal du kører følgende for at hente og overskrive dine lokale kopier. Altså du udskifter blot main med master.
git fetch origin master && git reset --hard origin/master
Man kan også trække ændringer fra en branch med et andet navn. Erstat
git fetch origin <branch-name>
git reset --hard origin/<branch-name>
Hvad er “main” (eller “master”) i Git?
I Git refererer “main” (eller tidligere “master”) til navnet på en branch. Når du kloner (henter) et projekt fra en fjernserver, oprettes der automatisk et lokalt repository med én standardbranch – som oftest hedder “main” (eller “master”). Denne branch fungerer som udgangspunktet eller “hovedgrenen” for projektets udvikling og er typisk den version, som andre udviklere forventer at bygge videre på eller arbejde med.