Ohjelmointi

6 tekemäsi virheitä - ja kuinka korjata ne

Suuri syy kehittäjille käyttää lähteenhallintajärjestelmää, kuten Git, on katastrofien välttäminen. Jos teet jotain niin yksinkertaista kuin vahingossa poistat tiedoston tai huomaat, että tusinaan tiedostoon tekemäsi muutokset olivat kaikki perusteettomia, voit kumota tekemäsi vaivattomasti.

Jotkut Git-virheet ovat pelottavampia ja vaikeasti peruutettavissa, jopa kokeneille Git-käyttäjille. Mutta pienellä varovaisuudella - ja jos et paniikkia - voit palata takaisin ohjelmoijien tuntemiin pahimpiin Gitin katastrofeihin.

Tässä on luettelo useista isommista Git-boo-boosista sekä vinkkejä niiden tukemiseen ja estää joitakin niistä. Mitä pidemmälle menee alaspäin, sitä suuremmat katastrofit kasvavat.

Git error # 1: Unohdit lisätä muutoksia viimeiseen sitoutumiseen

Tämä on yksi helpoimmista Git-virheistä toipua. Oletetaan, että teit jonkin työn paikalliselle sivuliikkeelle ja huomasit, että et lavastanut useita tarvittavia tiedostoja. Tai unohdit lisätä tiettyjä yksityiskohtia sitoutumisviestiin.

Ei pelkoa. Ensinnäkin, jos sinulla on uusia muutoksia, tee se. Kirjoita sitten git sitoutuminen - muutos muokata sitoutumisviestiä. Kun olet valmis, paina Esc ja kirjoita : xq tallentaa ja poistua editorista. (Tämä viimeinen vaihe on se, joka usein hämmentää Git-tulokkaita, jotka eivät aina ymmärrä, että sisäänrakennettu Git-editori on paljolti oma eläin.)

Jos muutat vain tiedostoja etkä tarvitse muuttaa sitoutumisviestiä, voit käyttää sitä git sitoutu --amend --no-edit lisätä tiedostot ja ohittaa viestin muokkaus.

Yksi tapa välttää tällainen virhe on säätää tapaa, jolla teet sitoutumisen Gitissä. Jos olet tekemässä jotain, jossa teet jatkuvasti pieniä sitoumuksia seurata vaiheittaisia ​​muutoksia, tee ne heitettävällä haaralla. Kun teet tämän, dokumentoi tärkeimmät muutokset, jotka olet tekemässä jonnekin - älä odota, kunnes kohtaat git sitoutua komentorivillä kirjoittaa kaikki muistiin. Käytä sitten, kun saavutat suuren virstanpylvään git merge - squash luovutushaarastasi tallentaa tulokset keskeneräiseen haaraan yhtenä, puhtaana sitoutumisena ja käytä sitoutumisviestiin tekemiäsi muistiinpanoja.

Git error # 2: Olet tehnyt muutoksia (paikalliseen) masteriin

Toinen yleinen hölynpöly: Olet tehnyt vastuullisesti joukon muutoksia ... mutta reposi päähaaralle vahingossa. Mitä sinä Todella halusi tehdä, oli sitouttaa heidät a Uusi haara tai siihen dev haara sinulla on erityisesti muutosten rikkomiseen.

Kaikki ei ole kadonnut. Tämä virhe voidaan korjata kolmella komennolla:

git haara uusi haara

git reset HEAD ~ --kova

git checkout uusi haara

Ensimmäinen komento luo uuden haaran, jonka kanssa haluamme työskennellä. Toinen komento palauttaa päähaaran juuri ennen viimeistä sitoutumista, mutta jättää juuri tekemäsi muutokset Uusi haara. Lopuksi siirrymme uuteen haaraan, jossa muutokset odottavat sinua.

Jos olet tehnyt useita sitoumuksia, käytä git reset HEAD ~ --kova, missä on niiden palautusten määrä, joihin haluat mennä. Tai voit käyttää git nollaus , missä on kohdesitoumuksen hajautustunnus, jos sinulla on se kätevä.

Tämän virheen välttämiseksi hanki tapana tehdä uusia oksia ja vaihtaa niihin, vaikka ne vain hylätään, aina kun aloitat minkä tahansa istunto koodisi kanssa.

Git error # 3: Olet siirtänyt tiedoston tai hakemiston roskakoriin

Toinen yleinen katastrofi on vahingossa roskakorin sisällön ... ja vain tietäen siitä monet sitoutuvat haaraan jälkeen tosiasia. Onneksi on helppo korjata.

Käytä ensin git-loki tai IDE: n sisäänrakennettu Git-työkalu löytääksesi hash-tunnuksen sitoutumiselle ennen tiedoston muokkaamista. Käytä seuraavaksi git checkout hash_id - / polku / tiedostoon tarkastaa vain kyseisen tiedoston kyseisestä sitoutumisesta. Huomaa, että polun tulee olla suhteessa projektin juuriin. Tämä sijoittaa tiedoston aikaisemman version projektisi lavastusalueelle.

Jos haluat vain palata takaisin n sitoutuu, et tarvitse hajautustunnusta. Voit vain antaa komennon git checkout HEAD ~ - / polku / tiedostoon, missä on niiden palautusten määrä, joihin haluat mennä.

Jos haluat tarkistaa kokonaisen hakemistoon tiedostoja ja käytä sitten Gitin jokerimuotoa tiedostopolkuihin. Esimerkiksi syöttäminengit-kassa HEAD ~ 1 - ./src/** vie sinut takaisin yhden sitoutumisen ja palauttaa kaiken / src hakemiston projektin juuresta.

Git error # 4: Poistit vahingossa haaran

Tässä on skenaario, jota me kaikki pelkäämme: vahingossa poistetaan koko haara arkistostamme. Tämä voi olla joko erittäin helppo toipua tai hieman hankalampi olosuhteista riippuen.

Käytä ensin git heijastin löytää haaralle viimeinen sitoutuminen. Luo sitten uusi haara hash ID: n avulla:

git checkout -b palautettu-haara

Huomaa, että pekoni puretaan vain, jos kyseinen haara on jo yhdistetty. Jos pakotat poistamaan sulkeutumaton haaratoimistosta, sinulla on vielä yksi tapa löytää se, jos et ole juossut git gc arkistossa:

git fsck --full --no-reflogs - saavuttamaton - kadonnut

Tämä kaataa luettelon kaikista kohteista, joihin ei enää päästä, mukaan lukien poistetut haarat. Etsi luettelon alareunasta "saavuttamaton sitoutuminen" -merkintä ja yritä palauttaa kyseinen hajautustunnus uudeksi haaraksi nähdäksesi, onko se roskakorissa. Jos näin ei ole, siirry luettelosta ylöspäin seuraavaan luetteloon ja katso, mitä voit palauttaa.

Älä koskaan poista haaraa oletusarvoisesti pääsääntöisesti, koska voit helposti päätyä sijoittamaan jätettä sulkeutumattomalle oksalle, jossa on vielä jotain arvokasta. Jos poistat oksat tavallisesti pakolla, se on merkki siitä, että oksien työtottumusten on oltava vähemmän sotkuisia.

Git virhe # 5: Sinä huijaat etähaaraa git push

Kerran työskentelin GitHub-arkiston paikallisen kopion parissa ja työnsin päähakemistoni vahingossa etäkopioon --pakottaa vaihtoehto. Päätin julkisen kopion reposta, joka ei ollut tuolloin käyttökelpoinen. Iso hups.

Jos olet tehnyt tällaisen virheen ja repo on synkronoitu etärepon kanssa tarpeeksi äskettäin, voit korjata sen käyttämällä omaa kopiota etärepo-haarasta. Vaihda haaraan, jonka haluat synkronoida uudelleen, olettaen, että et ole vielä siellä, ja anna tämä komento:

git reset --kova / @ {1}

Tämä nollaa kopion viimeiseen synkronoituun versioon . Minun tapauksessani haara oli hallita ja etärepo oli alkuperää, joten olisin voinut käyttää git reset - kova alkuperä / master @ {1}.

Käytä sitten git push -f palauttaa etätietovarasto aikaisempaan tilaansa.

Yksi tapa estää tämän toistuminen on kieltää voimankäyttö. Voit määrittää tämän Git-etätallennuksessa tällä komennolla:

git config - järjestelmä vastaanottaa.denyNonFastForwards true

Saattaa tulla aika, jolloin joudut tekemään voimansiirron, mutta on todennäköisesti parasta kytkeä tämä päälle, kun tarvitset sitä, ja pois päältä, kun et.

Git virhe # 6: Sinä annoit yksityisiä tietoja julkiselle repolle

Tämä voi olla pahin ja vaikein Git-ongelma käsitellä. Sinä olet vahingossa luovuttanut arkaluonteisia tietoja julkiselle repolle ja haluat leikata tiedostot reposta kirurgisesti. Sinun on varmistettava, että arkaluontoisia tietoja ei löydy edes palaamalla aikaisempaan sitoutumiseen, mutta sinun on tehtävä sekoskematta mihinkään muuhun.

Tämä on kaksinkertaista vaikeaa, jos kyseinen tiedosto on sidottu, oi, kuusi viikkoa sitten, ja sillä välin on tehty kuorma-auto muuta tärkeää työtä. Et voi palata takaisin ennen tiedoston lisäämistä; hävität kaiken muun prosessin aikana.

Hyvä uutinen: Muutama peloton Git-mavens loi työkalun, BFG Repo-Cleaner, nimenomaan pahojen tietojen poistamiseksi Git-repoista. BFG Repo-Cleaner -sovelluksen avulla voit suorittaa nopeasti yleisiä tehtäviä repolla, kuten poistaa kaikki tiedostot, jotka vastaavat tiettyä jokerimerkkiä tai sisältävät tiettyjä tekstejä. Voit jopa siirtää tiedoston, joka sisältää kaikki ei-toivotut tekstit.

BFG Repo-Cleaner on pohjimmiltaan automaatio monivaiheista prosessia varten git-suodatinhaara. Jos haluat mieluummin tehdä asioita käsin, GitHubilla on yksityiskohtainen läpikäynti prosessista. Mutta BFG-työkalu kattaa suurimman osan tavallisista käyttötapauksista, joista monet sisältyvät työkalun komentorivivaihtoehtoihin. Lisäksi prosessi on pitkä ja monimutkainen, ja on liian helppoa ampua itseäsi jalkaan jossain matkan varrella, jos teet sen käsin.

Huomaa, että jos puhdistat tietoja paikallisesta haarasta, joka on synkronoitava muualla, et voi synkronoida muuta kuin pakko-ohjauksella etähaaroihin. Koko sitoutumispuu on kirjoitettava uudelleen, joten kirjoitat pohjimmiltaan aivan uuden historian kaukosäätimeen. Sinun on myös varmistettava, että kaikki muut vetävät uuden kopion uudelleenkirjoitetusta reposta tekemiesi muutosten jälkeen, koska myös heidän repot eivät ole enää voimassa.