Rosszul írtam egy commit üzenetben.
Hogyan tudom megváltoztatni az üzenetet? A commit még nem lett elküldve.
git commit --amend
megnyitja a szerkesztőt, és lehetővé teszi, hogy megváltoztassa a legutóbbi commit üzenetét. Emellett a commit üzenetet közvetlenül a parancssorban is beállíthatja a következőkkel:
git commit --amend -m "New commit message"
...ez azonban a többsoros commit üzeneteket vagy a kisebb javításokat nehézkesebbé teheti a beírást.
Győződj meg róla, hogy nincsenek munkakópia módosítások staged, mielőtt ezt megteszed, különben azok is commitolva lesznek. (A Unstaged módosítások nem lesznek commitolva.)
Ha'a commitodat már feltoltad a távoli ágadba, akkor a commitot erőltetni kell a következővel: force push the commit:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Figyelmeztetés: a force-pushing felülírja a távoli ágat a helyi ág állapotával. Ha vannak olyan commitok a távoli ágon, amelyek nincsenek meg a helyi ágadban, akkor veszíteni fogod ezeket a commitokat.
Figyelmeztetés: légy óvatos az olyan commitok módosításával, amelyeket már megosztottál másokkal. A commitok módosítása lényegében átírja őket, hogy más SHA azonosítót kapjanak, ami problémát jelent, ha másoknak másolata van a régi commitról, amit átírtál. Bárkinek, akinek van egy példánya a régi commitból, szinkronizálnia kell a munkáját az újonnan átírt commitoddal, ami néha nehézségekbe ütközhet, ezért mindenképpen egyeztess másokkal, amikor megpróbálod átírni a megosztott commitok történetét, vagy egyszerűen csak kerüld a megosztott commitok átírását.
Egy másik lehetőség az interaktív rebase használata. Ez lehetővé teszi, hogy bármelyik frissíteni kívánt üzenetet szerkessze, még akkor is, ha az nem a legfrissebb üzenet.
A Git squash elvégzéséhez kövesse az alábbi lépéseket:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Miután squasholtad a commitjaidat - válaszd az e/r
-t az üzenet szerkesztéséhez:
A git rebase -i HEAD~X
használatakor több lehet, mint X
commit. A Git "összegyűjti" az összes commitot az utolsó X
commit között, és ha volt egy egyesítés valahol e tartomány között, akkor az összes commitot is látni fogod, így az eredmény X+<az egyesítésekben lévő commitok száma> lesz.
Ha ezt egynél több ág esetében kell megtenned, és a tartalom módosításakor konfliktusokba ütközhetsz, állítsd be a [git rerere
]-t3, és hagyd, hogy a Git automatikusan megoldja helyetted ezeket a konfliktusokat.
git commit --amend -m "your new message"
Ha a javítani kívánt commit nem a legfrissebb:
git rebase --interactive $parent_of_flawed_commit
.
Ha több hibás commitot akarsz javítani, add át a legrégebbi commit szülőjét.
Megjelenik egy szerkesztő, amely az összes commit listáját tartalmazza a megadott commit óta.
pick
-t reword
-re (vagy a Git régi verzióinál edit
-re) minden olyan commit előtt, amit javítani szeretnél.Minden egyes commitnál, amit újraírni akarsz, a Git visszavisz a szerkesztőbe. Minden egyes commitnál, amit szerkeszteni akarsz, a Git visszadob a shellbe. Ha a shellben vagy:
git commit --amend
git rebase --continue
Ennek a sorrendnek a nagy részét a különböző parancsok kimenete fogja elmagyarázni neked menet közben. Nagyon egyszerű; nem kell megjegyezned - csak ne feledd, hogy a git rebase --interactive
lehetővé teszi a commitok javítását, függetlenül attól, hogy azok milyen régen voltak.
Ne feledd, hogy nem akarod megváltoztatni azokat a commitokat, amelyeket már elküldtél. Vagy talán mégis, de ebben az esetben nagy gondot kell fordítanod arra, hogy kommunikálj mindenkivel, aki esetleg már húzta a commitjaidat és munkát végzett rajtuk. Hogyan tudom helyreállítani/visszaszinkronizálni, miután valaki rebase-t vagy reset-t tol egy közzétett ágba?