Ma tahaksin teada, kuidas kustutada commit'i.
Kustutamise all pean silmas seda, et ma justkui ei teeks seda kommitit ja kui ma tulevikus push'i teen, ei lükka minu muudatused kaugesse harusse.
Ma lugesin Giti abi ja ma arvan, et käsk, mida ma peaksin kasutama, on git reset --hard HEAD
. Kas see on õige?
Ohelepanu: git reset --hard
KUSTUTAB TEIE TÖÖTAVAD MUUTUSED. Enne selle käsu käivitamist tuleb kindlasti hoiustada kõik lokaalsed muudatused, mida soovite säilitada.
Eeldades, et sa istud selle commit'i peal, siis see käsk hävitab selle...
git reset --hard HEAD~1
HEAD~1
tähendab commit enne head.
Või võid vaadata git logi
väljundit, leida selle kommiti id, mille kohta tahad teha varundust, ja siis teha nii:
git reset --hard <sha1-commit-id>
Kui sa juba lükkasid seda, siis pead tegema force push'i, et sellest vabaneda...
git push origin HEAD --force
Kui aga, kui teised on selle võib-olla juba tõmmanud, siis on parem alustada uut haru. Sest kui nad tõmbavad, siis lihtsalt liidetakse see nende tööga kokku ja sa saad selle uuesti üles lükatud.
Kui te juba tõukasite, võib olla parem kasutada git revert
, et luua "peegelpilt" kommit, mis muudab muudatused tagasi. Mõlemad kommitid on aga logis.
Teadmiseks -- git reset --hard HEAD
on suurepärane, kui tahad WORK IN PROGRESS'ist lahti saada. See nullib teid tagasi kõige uuema commit'ile ja kustutab kõik muudatused teie tööpuus ja indeksis.
Lõpuks, kui teil on vaja leida commit, mille te "kustutasite", siis on see tavaliselt olemas git reflog
is, kui te ei ole oma repositooriumi prügikasti kogunud.
Kui te ei ole seda kommiti veel kuhugi lükanud, saate selle kommiti eemaldamiseks kasutada git rebase -i
. Kõigepealt leia välja, kui kaugele tagasi see kommit on (ligikaudu). Seejärel tehke:
git rebase -i HEAD~N
~N
tähendab, et rebaseeri viimased N
kommitid (N
peab olema number, näiteks HEAD~10
). Seejärel saate Git teile esitatud faili redigeerida, et kustutada rikutud commit. Selle faili salvestamisel kirjutab Git seejärel kõik järgmised kommitid ümber, nagu seda, mille sa kustutasid, ei oleks olemas.
Git raamatus on hea lõik rebasingi kohta koos piltide ja näidetega.
Ole sellega siiski ettevaatlik, sest kui sa muudad midagi, mida sa on lükanud mujale, siis on vaja teist lähenemist, kui sa ei kavatse teha force push'i.
Teine võimalus on üks minu isiklikest lemmikkäsklustest:
git rebase -i <commit>~1
See käivitab rebase'i interaktiivses režiimis -i
punktis vahetult enne seda kommitit, mida soovite maha teha. Redaktor käivitub, loetledes kõik sellest ajast alates tehtud kommitid. Kustutage rida, mis sisaldab kommiti, mille soovite kustutada, ja salvestage fail. Rebase teeb ülejäänud töö ära, kustutades ainult selle commit'i ja mängides kõik teised tagasi logisse.