Hur man tar bort ett åtagande från Github

0
46

Om du av misstag har begått något som du inte borde ha gjort, och tryckte på det till Github, det finns fortfarande sätt att ta bort eller ändra det. Vanligtvis vill du inte bråka med Git’s historia, men i vissa fall kan det vara säkert när det görs på rätt sätt.

Gör inte det här om du kan undvika det

Att ta bort commits från Git’s historia är i allmänhet en dålig idé. Git är tänkt att spåra alla versioner av dina filer, och det finns alltid alternativ till radering, som git revert, som kommer att hålla historiken intakt.

När den finns på ett fjärrlager , precis som Github, är det mycket svårare att bli av med åtagandet helt och hållet. Detta beror på att alla andra som använder repet kommer att ha sin egen lokala kopia av det repet, och att tvångsradera en commit kommer att få dem att gå ur synk.

Det finns fortfarande några anledningar till att göra detta, även om du kanske av misstag överlämnade privata data till en offentlig repo, som fortfarande skulle vara synlig i historiken oavsett vad du gör. Det kommer att orsaka en del problem för dina medarbetare, men även i det här fallet är det möjligt med en force push.

Att fixa åtaganden lokalt

Om du arbetar lokalt, och du inte har överfört dina ändringar till Github än, kan du säkert återställa eller ändra commits som inte finns på fjärrkontrollen. Git spårar din lokala katalog, arrangerar ändringar internt och håller en Git-historik. Allt detta hålls synkroniserat med fjärrkontrollen, men bara när du kör push/pull. Github bryr sig inte om tillståndet för ditt repo förrän du trycker.

< /p> Annons

Om du precis gjorde ett misstag när du commiterade filer kan du göra en mjuk återställning och göra en ny commit. Detta är faktiskt vanligt och användbart om du vill slå samman flera commits till en, kallad “squashing.” Om du ville ignorera ändringarna helt kan du göra det också (med en –hård återställning).

Om du inte har pushat till Github ännu, kan du återställa den senaste commit med en mjuk återställning, vilket inte påverkar dina lokala filer alls, men gör det så att du aldrig commiterade ändringarna i Git i första platsen.

git reset –soft HEAD~

Om du bara vill lägga till en ny fil/ändring till den senaste commit, har Git en flagga inbyggd för att göra exakt det:

git commit –amend –no-edit

Återställer (Github Safe)

Om du vill ångra ändringarna från en commit som du redan har skickat till Github, är det säkra sättet att göra det med en återgång. Återställning genererar en “motsatt commit,” vilket i princip kommer att ångra alla ändringar från en specifik commit. Om du har lagt till en rad tas den bort, och om du raderade en fil läggs den till igen.

Detta är säkert eftersom det inte ändrar historiken, bara lägger till ny historia ovanpå det. Du kan trycka på revert-commit till Github och låta dina medarbetare köra git pull för att få uppdateringarna.

Kör först git log för att få en lista över commits:

Kopiera sedan SHA1-hash och återställ commit:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Force Reset (Osäker)

Om du verkligen vill för att ta bort en commit, metoden att göra det är att ta bort den lokalt och sedan tvinga push till Github. Eftersom det här är mycket farligtoch kan förstöra din kollegas lokala arkiv, om du fortfarande vill, kan du behöva inaktivera force push-grenskydd i Githubs arkivinställningar:

Annons

Då kan du ta bort commit lokalt, vilket är enklast om det är det senaste commit:

git reset –soft HEAD~

Du kan också göra en interaktiv rebase, vilket är användbart om commit inte är den senaste. Om commiten var, till exempel för 12 commits sedan, kan du rebasera sedan, ta bort den felande commiten och spara.

git rebase -i HEAD~12

När din lokala repo är i fungerande skick kan tvinga push till Github.

git push origin master –force

Se till att din repo är uppdaterad! Om fjärrgrenen har ändringar som du inte gör, de kommer att skrivas över av denna push.

Du kanske vill koordinera detta med dina teammedlemmar, eftersom du kanske måste pinga dem och säga åt dem att köra en hämtning och återställa:

git fetch git reset origin/master –soft

Flytta en Commit till en annan gren

Om du av misstag har anslutit dig till fel gren och vill ta bort commit och flytta den till rätt gren, det finns verktyg i Git för att hantera det. Du kan läsa vår guide till att flytta runt för att ta reda på mer, men samma principer gäller—om du behöver ta bort ett uppdrag helt måste du tvinga återställning. Om du klarar av att återgå kan du helt enkelt gå tillbaka och välja körsbär.