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:
- Master-haarassa tunnistetaan bugi., Onnistuneesti toiminut ominaisuus on nyt rikki.
- kehittäjä tutkii historiaa master haara käyttäen
git log
koska ”puhdasta historiaa” kehittäjä on nopeasti voitava syy historiasta-hanke. - kehittäjä voi tunnistaa, kun vika oli otettu käyttöön käyttäen
git log
joten kehittäjä suorittaagit bisect
. - 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:
Agit log
format string that will be used for formatting interactive rebase display
Advanced rebase application
The command line argument
--onto
can be passed togit 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
tuleeja featureB on viite siitä, mitä
HEAD
jatulee 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äengit 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äengit 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
-