user Created with Sketch.
Group 2 Created with Sketch.

Git-situation

Att återställa en felaktig lansering

Ibland händer det att en bugg lanseras och att det orsakar så stora problem att man måste återställa lanseringen till hur det såg ut innan.

I den här övningen kommer vi att börja med en situation där vi har en lokal repo där vi gör våra ändringar och även en "gitlab"-repo som kommer att simulera live-versionen på servern.

Förberedelser:

  • Ladda ner den här filen och packa upp den någon stans lokalt på din dator.
    Ladda ner Git-repo
  • Öppna terminalen och gå till mappen.

Du kommer nu se två mappar: local och gitlab

Vi kommer bara att arbeta ifrån local så gå in i den mappen.

  • Skriv  ls för att se kundens webshop.
  • Gå till webbläsarens addressfält och skriv in sökvägen till customer_webshop.html, t.ex:
    file:///home/path/unwanted_release/local/customer_webshop.html
    och 
    file:///home/path/unwanted_release/gitlab/customer_webshop.html
    Så kan du se hur webshoppen ser ut lokalt i din utvecklingsmiljö (local) samt på servern (gitlab).
  • Skriv git remote set-url origin ../gitlab/ för att origin ska peka till gitlab

Merga in felet och pusha till master.

Som du ser i webbläsaren så har det uppstått ett fel lokalt. Så för att simulera en felaktig lansering så ska vi nu merga in dev_branch i master och pusha till servern.

  • Checka ut master git checkout master
  • Merga dev_branch med master git merge master dev_branch
  • Pusha till master git push origin master

Om du kollar webbshoppen på master så kommer ingenting att fungera där heller:
file:///home/path/unwanted_release/gitlab/customer_webshop.html

Om det här hade varit en skarp situation så kommer en av våra kunders webbshoppar att ha slutat fungera.
Så nu är det din uppgift att lösa det här.

Det finns ett par olika sätt att lösa det här på. Testa gärna på egen hand innan du kollar på lösningarna. Om du vill börja om så kan du alltid bara ta bort git-situationen du laddade ner och lägga till den på nytt.

 

 

 

 

Lösning #1 
Git revert för att skapa en ny commit som ångrar dina felaktiga ändringar.

  • Checka ut master i local.
  • Skriv git log och hitta hashen till den felaktiga commiten.
  • Skriv git revert [hashen]
  • Om du skriver git log så kan du se att det har skapats en ny commit som tar bort ändringarna i den felaktiga commiten innan.
  • Skriv git diff HEAD~1 för att se ändringen som har tagits bort.
  • Skriv nu git push origin master för att få ändringarna till servern också.


Lösning #2
Git revert genom gitlab för att skapa en ny commit på gitlab som ångrar dina felaktiga ändringar.
Den här lösningen går för tillfället inte att testa då man måste ha en repo på gitlab.

 

  • Klicka på knappen "Revert" inne i Merge requesten. Nu kommer det ha skapats en ny commit som ångrar dina felaktiga ändringar.
  • Gå nu till master i local och skriv git pull.


Lösning #3
Resetta lokalt och pusha upp en tidigare commit.
Den här lösningen kommer inte att fungera i en verklig situation då serverns master branch är skyddad och inte tillåter force-pushar av säkerhetsskäl. Men övningen kan ändå ge insikt i hur git fungerar och du kan alltid göra såhär på dina egna branches.

  • Checka ut master i local.
  • Skriv git log och hitta hashen till den commit du vill återställa till.
  • Skriv git reset --hard [hashen]
  • Skriv nu git push -f origin master för att få ändringarna till servern också.

 

Om du skriver "git remote show origin" så kan du se att våran origin pekar till den andra mappen i våran test-situation som heter gitlab/
Kom ihåg att du även måste göra återställningen av den felaktiga comitten på dev_branch.
Master-branchen på servern är "Protected" i gitlab vilket innebär att man inte får köra git push -f origin master. Det här för att det är för kraftfullt och om man skulle råka skriva master när man egentligen ville skriva namnet på sin egna branch så hade all utveckling på origin/master skrivits över.

Snyggt jobbat!

Valfri text