Kun työskentelet Gitin kanssa, huomaat, että joskus sitoumukset on poistettava, koska ne ovat esittäneet virheen tai ne on käsiteltävä uudelleen.
Jos se on viimeinen sitoutuminen on hyvin suoraviivaista. Suorita vain:
git reset HEAD^
Tämä avaa viimeisimmän sitoutumisen, mutta jättää kaikki tiedostoihisi tekemät muutokset ennalleen.
Jos haluat poistaa enemmän kuin vain viimeisen sitoutumisen, voit käyttää kahta tapaa. Ensimmäinen käyttää uudelleenkäynnistystä, jolloin voit poistaa yhden tai useamman peräkkäisen sitoumuksen, toinen on kirsikka-valinta, jonka avulla voit poistaa ei-peräkkäiset sitoumukset.
Esimerkki git-lokista
Numero | Hash | Vahvista viesti | Kirjoittaja |
---|---|---|---|
1 | 2c6a45b | (HEAD) Lisää julkinen menetelmä käyttää suojattua menetelmää | Tom |
2 | ae45fab | Tietokantaliittymän päivitykset | Urakoitsija 1 |
3 | 77b9b82 | Tietokantaliittymän parantaminen | Urakoitsija 2 |
4 | 3c9093c | Yhdistetty kehityshaara masteriksi | Tom |
5 | b3d92c5 | Uuden tapahtuman CMS-moduulin lisääminen | Paul |
6 | 7feddbb | CMS-luokan ja tiedostojen lisääminen | Tom |
7 | a809379 | Projektin lisääminen Gitiin | Tom |
Rebasen käyttö
Yllä olevan git-lokin avulla haluamme poistaa seuraavat komennot; 2 & 3 (ae45fab & 77b9b82). Koska ne ovat peräkkäisiä sitoumuksia, voimme käyttää uudelleentallennusta.
git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>
esim. Poistamaan sitoumukset 2 & 3 yllä
git rebase --onto repair~3 repair~1 repair
Cherry Pickin käyttö
Vaihe 1: Etsi sitoutuminen ennen sitoutumista haluat poistaa git log
Vaihe 2: Kassalla, joka sitoutuu git checkout <commit hash>
Vaihe 3 : Luo uusi haara nykyisellä kassalla sitoutuminen git checkout -b <new branch>
Vaihe 4: Nyt sinun on lisättävä sitoutuminen poistetun sitoutumisen jälkeen git cherry-pick <commit hash>
Vaihe 5: Toista nyt vaihe 4 kaikille muille säilytettäville sitoumuksille.
Vaihe 6: Kun kaikki sitoumukset on lisätty uuteen haaraan ja ne ovat on sitoutunut. Tarkista, että kaikki on oikeassa kunnossa ja toimii tarkoitetulla tavalla. Tarkista, että kaikki on tehty: git status
Vaihe 7: Vaihda rikkoutuneeseen haaraan git checkout <broken branch>
Vaihe 8: Suorita nyt rikkoutuneelle haaralle kova palautus sitoutumiselle ennen sitä, jonka haluat poistaa git reset --hard <commit hash>
Vaihe 9: Yhdistä kiinteä haara tähän haaraan git merge <branch name>
Vaihe 10: Työnnä yhdistetyt muutokset takaisin alkuperään. VAROITUS: Tämä korvaa etärepon! git push --force origin <branch name>
Voit tehdä prosessin luomatta uutta haaraa korvaamalla vaiheen 2 & 3 vaiheella 8 älä suorita Vaihe 7 & 9.
Esimerkki
Sano, että haluamme poistaa komennot 2 & 4 reposta.
-
git checkout b3d92c5
Tarkista viimeinen käyttökelpoinen sitoutuminen. -
git checkout -b repair
Luo uusi haara työskentelemään. -
git cherry-pick 77b9b82
Suorita sitoutumisen 3 läpi. -
git cherry-pick 2c6a45b
Suorita sitoutuminen 1. -
git checkout master
Kassan päällikkö. -
git reset --hard b3d92c5
Palauta päällikkö viimeiseksi käyttökelpoiseksi sitoutumiseksi. -
git merge repair
Yhdistä uusi haaramme päälliköksi. -
git push --hard origin master
Työnnä master etärepoon.
Loppuhuomautus
Git rebase & cherrypick ovat vaarallisia, mutta tehokkaita ratkaisuja, joita tulisi käyttää vain viimeisenä vaihtoehto, ja sen saa suorittaa vain joku, joka tietää mitä tekee. Varo, että molemmilla ratkaisuilla voi olla haitallisia vaikutuksia muille käyttäjille, jotka työskentelevät samalla arkistossa / haarassa.
Muista lopuksi olla varovainen ja onnea!