Hur man fixar, redigerar eller ångrar Git -åtaganden (Ändra Git -historik)

0
167

Git ’ s engagemangshistorik är utformad för att vara oföränderlig (för för det mesta) och spåra varje förändring i ditt projekt så att du aldrig förlorar arbete. Ibland är det emellertid nödvändigt att skriva om Git-historiken, så Git tillhandahåller några verktyg för att redigera befintliga åtaganden.

Lägga till nya ändringar i åtaganden < /h2>

Det vanligaste användningsfallet för detta är när du gör ett engagemangsmeddelande, och sedan, innan du trycker till din fjärrkontroll, inser att du har trasslat till och behöver göra en liten förändring. Du kan naturligtvis bara göra ett andra åtagande, men det är onödigt och visar också alla dina medarbetare ditt dumma misstag när du så småningom trycker på fjärrkontrollen.

Om du helt enkelt lägger till ändringar kan du använda git commit –amend. Detta ändrar det senaste åtagandet och går samman i de ytterligare ändringar som du har genomfört.

Först måste du iscensätta dina ändringar:

git add.

Och ändra sedan:

git commit –amend –no-edit

Flaggan-utan redigering gör att kommandot inte ändrar åtagandemeddelandet. Om du behöver klargöra de nya ändringarna i ett nytt meddelande, lämna den här flaggan och du kommer att bli ombedd att ange det nya meddelandet.

Under huven gör ändringskommandot ett nytt åtagande med de extra ändringarna och ersätter sedan fullständigt källåtagandet i Git -historien. Det gamla åtagandet är fortfarande tillgängligt från git reflog (mer om det nedan), men framåt är det nya åtagandet det enda som finns. När du går till en fjärranslutning finns det inget sätt att veta att åtagandet har ändrats, det är en rent lokal förändring.

Annonsering

På grund av detta kommer du inte att vill ändra åtaganden som redan har drivits, eftersom du kommer att stöta på många problem och måste tvinga till fjärrkontrollen, vilket inte är bra för någon.

Ändra bara Git Commit -meddelandet

Om du inte behöver göra några ändringar och bara vill fixa ett stavfel kan du köra ändring utan några ändringar också:

git commit –amend -m “ett uppdaterat commit -meddelande”

Unstaging Changes From Commits

Git ’ s ändringskommando fungerar bara om du & #8217; lägger strikt till ändringar. När vi säger “ tillagd, ” vi menar inte bara nya kodrader; Att ändra en kodrad är också att lägga till ändringar. Att ta bort en kodrad eller en hel fil är också en ändring som läggs till, även om det tar bort data från projektet när ändringen tillämpas.

Det finns dock också fall där du kanske vill ta bort ändringar från åtaganden. Säg till exempel att du sprang:

git add. git commit

Och lade till varje förändring i din repo till de iscensatta ändringarna, och gjorde det, innan du insåg, “ oh skit! Jag tänkte inte begå den där filen! ” I det här fallet måste du skicka tillbaka alla ändringar till iscensättning och sedan avinstallera de filer du inte vill skjuta manuellt.

Lösningen är att utföra en återställning, ta bort åtagandet och skicka tillbaka ändringarna. Det finns några typer av återställningar, men de handlar alla om att ta åtaganden från Gits historia och skicka tillbaka dem till antingen scenen, den lokala katalogen eller direkt till papperskorgen.

Annons

I det här fallet är en mjuk återställning vad du vill, vilket skickar tillbaka alla ändringar till iscensättning. Du kan använda följande stenografi för att återställa åtagandet bakom HEAD, annars måste du hämta referensen från git reflog:

git reset –soft HEAD ~

Då måste du ta bort filen du inte vill ha åtagit sig. Sättet att göra detta är faktiskt också en återställning, i det här fallet en blandad återställning på en specifik fil:

git reset -blandat filnamn

Detta fungerar eftersom återställning av den här filen tar bort ändringarna från iscensättning, och det blir inte engagerat när du gör om åtagandet.

Du kan också göra en blandad återställning på hela repo och git lägga till alla filer utom den du inte vill ha. Detta är lättare att göra om du använder en GUI Git-klient.

Behöver du ångra/ta bort ett åtagande? Använd Återställ

Att återkalla ett åtagande är det enklaste sättet att ta bort ändringar. I grund och botten tar det alla ändringar från målåtagandet och tillämpar motsatsen till dem. Om du skapade en fil har den tagits bort. Om du tog bort en kodrad läggs den till igen. Det är det Git-godkända sättet att “ ta bort ” eller “ ångra ” ett åtagande, eftersom originalet fortfarande finns kvar i git -historiken.

För att använda det, kör git -logg för att visa åtaganden:

git -logg

Kopiera referens -ID och återställ sedan åtagandet:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Om du bara fastnade in vim, tryck på Q och kanske köra git config –global core.editor “nano”.

Använd Rebasing för något mer komplicerat

Rebasing är i huvudsak en metod för att flytta förbindelser i ditt förråd. Istället för att slå samman, skriver omhistorien om git -historiken för att flytta enskilda åtaganden till en ny plats. De ursprungliga förpliktelserna hänger kvar och tas bort från den officiella Git -historien, även om de fortfarande finns där i git -refog.

Annonsering

Vi kommer inte in på de exakta detaljerna om det här, men om du är intresserad av hur det fungerar kan du läsa vår guide för att använda git rebase.

Vad ska du göra om du vill gå tillbaka?

Som tur är registrerar Git varje ändring, även när du bryter mot reglerna och skriver om historiken.

Varje gång ditt filtips uppdateras av någon anledning, lagrar Git tillståndet för kataloginnehållet före uppdateringen i referensloggen eller refog. Du kan se loggen med git reflog:

git reflog

Många av dessa kommer att vara verkliga åtaganden, men det inkluderar också andra förändringar. Om du behöver gå tillbaka till en individuell förändring kan du utföra en hård återställning:

git reset –hard fdb9db9

Detta ger ett bra skyddsnät, men du bör varnas för att reflog bara spårar ändringar som var faktiskt engagerad, inte bara iscensatt, och den spårar bara rörelser i grenspetsen. Dessutom behåller reflog bara poster i 90 dagar. Efter det kommer du bara att kunna återställa till faktiska åtaganden.