Articles

git rebase (Suomi)

Rebasing on siirtymässä tai yhdistämällä sarja sitoutuu uuden pohjan tehnyt. Rebasing on hyödyllisin ja helposti visualisoitu yhteydessä ominaisuus haarautuva työnkulku. Yleinen prosessi voidaan visualisoida seuraavasti:

– sisällön näkökulmasta, rebasing on muuttumassa perustaa oman sivuliikkeen yhdestä sitoutua toiseen joten se näyttää kuin jos olisit luonut branch eri sitoutua., Sisäisesti Git toteuttaa tämän luomalla uusia sitoumuksia ja soveltamalla niitä määritettyyn perustaan. On tärkeää ymmärtää, että vaikka oksa näyttää samalta, se koostuu täysin uusista sitoutumisista.

Käyttö

ensisijainen syy rebasing on säilyttää lineaarinen hankkeen historia. Ajatellaan esimerkiksi tilannetta, jossa master haara on edistynyt sen jälkeen, kun olet aloittanut kehityshaaran., Haluatko saada uusimmat päivitykset master haara oman kehityshaaran, mutta haluat säilyttää oman seurakunnan historia puhtaana, jotta se näyttää kuin jos olet työskennellyt pois uusimmat master haara. Tämä antaa myöhemmin hyötyä puhdas yhdistää oman kehityshaaran takaisin master haara. Miksi haluamme säilyttää ”puhtaan historian”? Puhtaan historian hyödyt konkretisoituvat, kun suoritetaan git-operaatioita regression käyttöönoton tutkimiseksi. Todellisempi skenaario olisi:

  1. Master-haarassa tunnistetaan bugi., Onnistuneesti toiminut ominaisuus on nyt rikki.
  2. kehittäjä tutkii historiaa master haara käyttäen git log koska ”puhdasta historiaa” kehittäjä on nopeasti voitava syy historiasta-hanke.
  3. kehittäjä voi tunnistaa, kun vika oli otettu käyttöön käyttäen git log joten kehittäjä suorittaa git bisect.
  4. Koska git historia on puhdas, git bisect on hienostunut joukko sitoutuu verrata kun etsit regressio., Kehittäjä löytää nopeasti vian esittävän toimituksen ja pystyy toimimaan sen mukaisesti.

Lue lisää git log ja git bisect heidän yksilölliset käyttö-sivuja.

sinulla on kaksi vaihtoehtoa ominaisuuden integroimiseksi päähaaraan: yhdistäminen suoraan tai uudelleenpoistaminen ja sitten yhdistäminen. Entinen vaihtoehto johtaa 3-way-merge ja yhdistää sitoutua, kun taas jälkimmäinen johtaa nopeasti eteenpäin yhdistää ja täysin lineaarinen historia. Seuraavassa kaaviossa osoitetaan, miten uudelleenpoistuminen päähaaraan helpottaa nopeaa yhdistämistä.,

Rebasing on yleinen tapa integroida alkupään muutokset paikalliseen arkistoon. Vetämällä alkupään muutokset Git merge tuloksia on turha yhdistää sitoutumaan aina kun haluat nähdä, miten hanke on edennyt. Toisaalta rebasing on kuin sanoisi: ”Haluan perustaa muutokseni siihen, mitä kaikki ovat jo tehneet.”

Älä rebase julkinen historia

Kuten olemme keskustelleet aiemmin kirjoittamasta historiaa, sinun ei pitäisi koskaan rebase sitoutuu, kun he ovat olleet työnsi julkiseen arkistoon., Uudelleenasennus korvaisi Vanhat toimitukset uusilla ja näyttäisi siltä, että osa projektihistoriastasi katosi äkillisesti.

Git Rebase-Standardin vs Git Rebase Interactive

Git rebase interactive on, kun git rebase hyväksyy -- i argumentti. Tämä tarkoittaa ”Interactive.”Ilman argumentteja komento toimii normaalitilassa. Molemmissa tapauksissa oletetaan, että olemme luoneet erillisen kehityshaaran.,

 # Create a feature branch based off of master git checkout -b feature_branch master # Edit files git commit -a -m "Adds new feature" 

Git rebase standard-tila ottaa automaattisesti tekee teidän nykyinen työ haara ja soveltaa niitä pää kulunut haara.

 git rebase 

Tämä automaattisesti rebases nykyinen haara päälle , joka voi olla mitä tahansa sitoutua viite (esimerkiksi TUNNUS, sivuliikkeen nimi, tag, tai suhteellinen viittaus HEAD).

Käynnissä git rebase, jossa -i lippu alkaa interaktiivinen rebasing istunto., Sen sijaan, että sokeasti liikkuvat kaikki sitoutuu uuden pohjan, interaktiivinen rebasing antaa sinulle mahdollisuuden muuttaa yksittäisiä sitoutuu prosessissa. Näin voit siivota historiaa poistamalla, halkaisemalla ja muuttamalla olemassa olevaa toimitussarjaa. Se on kuin Git commit --amend steroideissa.

 git rebase --interactive 

Tämä rebases nykyinen haara päälle mutta käyttää interaktiivinen rebasing istunto. Tämä avaa muokkaimen, jossa voit syöttää komentoja (kuvattu alla) jokaiselle uudelleen asennettavalle toimitukselle., Nämä komennot määrittävät, miten yksittäiset sitoutumiset siirretään uuteen tukikohtaan. Voit myös järjestää sitoutumislistauksen uudelleen muuttaaksesi sitoumusten järjestystä itse. Kun olet määrittänyt komennot jokaiselle toimituksen rebase, Git alkaa pelata takaisin toimitukset soveltamalla rebase komentoja. Se rebasing muokata komennot ovat seuraavat:

Lisää rebase komennot

Mahdollisimman tarkasti kirjoittamasta historian sivu, rebasing voidaan muuttaa vanhempien ja useita sitoutuu, sitoutunut tiedostoja, ja useita viestejä., Vaikka nämä ovat yleisimpiä sovelluksia, git rebase on myös muita komento vaihtoehtoja, jotka voivat olla hyödyllisiä monimutkaisempia sovelluksia.

  • git rebase -- d tarkoittaa toiston aikana toimitus hylätään lopullisesta yhdistettynä sitoutua estää.
  • git rebase -- p jättää sitoutumisen sellaisenaan. Se ei muuta toimituksen sanomaa tai sisältöä ja on edelleen yksittäinen sitoumus sivukonttoreiden historiassa.
  • git rebase -- x toiston aikana suorittaa komentorivin shell script jokainen merkitty sitoutua., Hyödyllinen esimerkki olisi suorittaa codebase – testisarjan tiettyjä toimituksia, jotka voivat auttaa tunnistamaan regressioita uudelleenlastauksen aikana.

Yhteenveto

Interactive rebasing antaa sinulle täydellisen valvoa, mitä projektin historia näyttää. Tämä tarjoaa paljon vapautta kehittäjille, koska se antaa heidän tehdä ”sotkuinen” historia, kun he ovat keskittyneet kirjoittamaan koodia, sitten mennä takaisin ja puhdistaa sen jälkeen tosiasia.

Useimmat kehittäjät haluavat käyttää interaktiivinen rebase puolan kehityshaaran ennen kuin yhdistämällä se osaksi tärkein koodin perusta., Tämä antaa heille mahdollisuuden squash merkityksetön sitoutuu, poistaa vanhentuneet niitä, ja varmista, että kaikki muu on kunnossa ennen sitoutumistaan ”virallinen” hankkeen historia. Kaikille muille näyttää siltä, että koko ominaisuus on kehitetty yhdessä hyvin suunniteltujen toimitusten sarjassa.

interaktiivisen uudelleenpoistamisen todellinen voima on nähtävissä tuloksena olevan mestarihaaran historiassa. Kaikki muu, se näyttää olet loistava kehittäjä, joka toteuttaa uusi ominaisuus, jolla täydellinen määrä sitoutuu ensimmäisellä kerralla., Näin vuorovaikutteinen uudelleenasennus voi pitää projektin historian puhtaana ja merkityksellisenä.

asetukset

On olemassa muutamia rebase ominaisuuksia, jotka voidaan asettaa käyttämällä git config. Nämä vaihtoehdot muuttavat git rebase lähtöilmettä ja tuntumaa.

  • rebase.stat: boolean, joka on asetettu false oletuksena. Vaihtoehto vaihtaa visuaalisen diffstat-sisällön näytön, joka osoittaa, mikä muuttui edellisen debaasin jälkeen.
  • rebase.autoSquash: totuusarvo, joka vaihtaa --autosquash käyttäytyminen.,
  • rebase.missingCommitsCheck: Voidaan asettaa useita arvoja, jotka muuttuvat rebase käyttäytymistä ympäri puuttuu sitoutuu.,/tr>

    error

    Stops the rebase and prints removed commit warning messages

    ignore

    Set by default this ignores any missing commit warnings
    • rebase.instructionFormat: A git log format string that will be used for formatting interactive rebase display

    Advanced rebase application

    The command line argument --onto can be passed to git rebase., Kun git rebase --onto mode komento laajenee:

      git rebase --onto 

    --onto komento mahdollistaa tehokkaampi muodossa tai rebase, jonka avulla kulkee erityisiä refs olla vinkkejä rebase.
    sanotaan, että meillä on esimerkki repo oksat, kuten:

      o---o---o---o---o master \ o---o---o---o---o featureA \ o---o---o featureB 

    featureB perustuu featureA, kuitenkin ymmärrämme, featureB ei ole riippuvainen mitään muutoksia featureA ja voi olla haarautunut pois master.

      git rebase --onto master featureA featureB 

    featureA on ., master tulee ja featureB on viite siitä, mitä HEAD ja tulee kohta. Tulokset ovat sitten:

      o---o---o featureB / o---o---o---o---o master \ o---o---o---o---o featureA 

    Ymmärrys vaaroista rebase

    Yksi varoitus harkita, kun työskentely Git Rebase on merge-konflikteja voi tulla useammin aikana rebase työnkulun. Näin tapahtuu, jos sinulla on pitkään elänyt haara, joka on eksynyt isännästä., Lopulta haluat rebase vastaan mestari ja tuolloin se voi sisältää monia uusia sitoutuu siihen, että teidän haara muutokset saattavat olla ristiriidassa. Tämä on helposti korjattavissa rebasing haara usein vastaan mestari, ja tehdä useammin sitoutuu. --continue ja --abort komentorivin argumentteja voidaan välittää git rebase etukäteen tai palauttaa rebase käsiteltäessä ristiriitoja.

    vakavampi rebase caveat on kadonnut interaktiivisen historian uudelleenkirjoittamisesta., Käynnissä rebase interactive mode-tilassa ja suorittamista subcommands, kuten squash tai pudota poistaa sitoutuu omalta branche on välittömästi kirjautua. Ensi silmäyksellä tämä voi näyttää siltä, että toimitukset ovat pysyvästi poissa. Käyttäen git reflog nämä sitoutuu voidaan palauttaa ja koko rebase voidaan kumota. Lisätietoja käyttäen git reflog löytää kadonnut sitoutuu, vieraile Git reflog asiakirjat-sivulla.

    git Rebase itsessään ei ole vakavasti vaarallinen., Todelliset vaaratapaukset syntyvät, kun historian uudelleenkirjoittaminen interaktiivisia rebases ja pakottaa työntämällä tulokset etähaara, joka on jaettu muille käyttäjille. Tämä on kuvio, joka olisi vältettävä, koska se on kyky korvata muiden etäkäyttäjien työtä, kun he vetävät.

    Toipumassa alkupään rebase

    Jos toinen käyttäjä on rebased ja voima työntää branch, että olet sitoutumalla, a git pull sitten korvaa kaikki sitoutuu sinulla on perustuu pois, että edellinen haara kärki, joka oli voima työnsi., Onneksi, käyttäen git reflog voit saada reflog kauko haara. Kauko-haara on reflog voit löytää ref ennen kuin se oli rebased. Voit sitten rebase haarakonttorin vastaan, että kauko ref käyttäen --onto vaihtoehto kuin edellä Advanced Rebase Sovellus-osassa.

    Tiivistelmä

    tässä artikkelissa me kattaa git rebase käyttö. Keskustelimme peruskäyttötapauksista ja edistyneemmistä esimerkeistä., Joitakin keskeisiä keskustelunaiheita ovat:

    • git rebase-standardin vs interaktiivinen tilat
    • git rebase asetuksia
    • git rebase –päälle
    • git rebase menettänyt syyllistyy