Blog

Vad gör du när du committar till fel Git-branch?

APR 12, 2018

Vi pratar trots allt om Git, så den goda nyheten är att det är relativt enkelt.

Eficode is the leading DevOps company in Europe, driving and building the future of software development across 10 countries, with 500+ experts in DevOps and sustainable software development. Our Eficode ROOT managed DevOps platform provides centralized access control and real-time visibility of project status, quality, and performance that integrates with 50+ of your preferred tools, including the Atlassian Stack and open-source systems like Jenkins and Kubernetes.

Det är en solig dag, du har det toppen medan du kodar och eftersom du är en så noggrann person committar du regelbundet.

Och så slår det dig: flera commits, alla till fel branch. Vad gör du nu?

Säg att du committade till master, men egentligen skulle committen till en ny branch som heter ”myfeature”. Det är två saker som behöver rättas till. Först behöver du återställa master till dess ursprungliga läge. Sedan behöver du få över dina ändringar till den nya branchen.

Här är dina alternativ:

  • Ångra commits på master, checka ut den nya branchen myfeature och committa alla ändringar som en enda commit.

  • Ändra refs manuellt så att master pekar tillbaka till där du var och din nya branch-ref pekar dit.

Den första lösningen är smidig, enkel och lätt att använda, med relativt liten felmarginal. Nackdelen är dock att du inte får med dina ursprungliga commit-meddelanden till den nya branchen och att alla ändringar läggs in som en enda commit med ett nytt commit-meddelande och så vidare.

Den andra lösningen är lite mer avancerad. Däremot flyttas alla dina commits över till den nya branchen. Du bör förstås kontrollera resultatet innan du pushar till ditt centrala repo, eftersom det är något lättare att göra fel.

Ångra och committa till en ny branch

Kontrollera att du är på den branch som du har committat till. Använd git log för att se hur många commits du vill rulla tillbaka. Ångra sedan committen med git reset HEAD~N, där ”N” är antalet commits du vill ångra.

Till exempel, för att ångra en commit:

git reset HEAD~1

Skapa sedan en ny branch och checka ut den i ett och samma steg. Lägg därefter till och committa dina ändringar igen.

git checkout -b newbranch

git add -A

git commit -m "Committed on new branch"

Var dock försiktig med add -A, eftersom du kan lägga till orelaterade filer och kataloger som inte är committade. Kontrollera git status innan du committar.

Flytta commits till den andra branchen

Här finns det större risk för fel. Det första steget är att anteckna commit-id:t för den commit som du vill ska vara head för den nya branchen.

git log

Kopiera commit-id:t till en säker plats.

Återställ sedan din nuvarande branch med en commit (eller så många commits som du behöver gå tillbaka):

git reset --hard HEAD~1

Det sista steget är att flytta efterföljande commits till den nya branchen:

git checkout -b newbranch

git reset --hard < commit_id >

Och så var det klart! Dags att pusha båda brancherna (med --force om det behövs, det vill säga om du tidigare har pushat ändringarna). Men som alltid när du använder --force: se till att det inte finns några andra commits efter dina, eftersom de då skulle ångras.

Ny på Git? Läs mer och kontakta oss!

  • DevOps
  • Atlassian

Subscribe to our newsletter