”Ota rebase päälle mestari ja me yhdistä pull request”.
”Can you please squash your committes together so we get a clean, reversiibeli githistory?”.
”voitko kirjoittaa toimituksen viestin kuvaamaan paremmin ongelmaa, ja miten se ratkaisee sen?”.
tällaisia kysymyksiä esitetään yleisesti vetopyynnöissä. Katsotaanpa, miksi heexist, miten suorittaa niitä, ja niiden mahdolliset ongelmat.,
Sanamuotoa viime sitoutua viesti
Yksi helpoimmista historian uudelleenkirjoittaminen voimme tehdä git on muuttumassa lastcommit viesti. Sanotaan heti sitoutumisen jälkeen löydät kirjoitusvirheen sen kirjoituksesta, tai löydät paremman tavan kuvata muutosta. Tehdä thecorrection ajaa:
git commit --amend
avaa editorwith viime commit-viesti, joten voit muokata sitä. Säästämisen jälkeen luodaan uusi toimitus samoilla muutoksilla ja uudella viestillä, joka korvaa commitwithin edellisellä viestillä.,
Tämä voi olla hyödyllistä sisällyttää tiedostoja unohdit seurata, tai includemodifications tiedostot, jotka olet juuri tehnyt. Voit tehdä niin, voit lisätä changesand suorita sitten muuttaa:
git add README.md config/routes.rb git rm notes.txt git commit --amend
Syrjään muokkaaminen commit-viesti, uusi commit sisältää changesspecified git add
ja git rm
. Voit myös muokata tekijää. Esimerkiksi:
git commit --amend --author="Tute Costa and Dan Croak <[email protected]>"
Saavutus Auki!, Voit nyt muuttaa arkistosi viimeistä toimitusta sisällyttääksesi tiedostoihin uudempia muutoksia ja / tai parantaaksesi kommit-viestiä. Mutta älä ala muuttaa kaikki-asiat ennen ymmärtämystä tämän blogikirjoituksen otsikolla ”vaara”.
Sanamuotoa muita sitoutua viestejä
Olisi kiva puhua siitä nyt, mutta meidän täytyy ymmärtää enemmän generaltool ennen. Pysy kuulolla! Kaikki muu on helpompaa, kun luemme…
Interaktiivinen Rebase
git rebase
re-koskee sitoutuu, yksi kerrallaan, jotta, teidän nykyinen haara toiseen., Se hyväksyy useita valinnat parametrit, joten se on jäävuoren huippu selitys, tarpeeksi silta thegap välillä StackOverflow tai GitHub kommentteja ja git man-sivut.
mielenkiintoinen vaihtoehto se hyväksyy on – --interactive
(-i
lyhyt), joka willopen toimittaja luettelo toimituksista, jotka ovat aikeissa muuttaa. Tämä lista hyväksyy komentoja, jolloin käyttäjä voi muokata luetteloa ennen therebase-toiminnon aloittamista.
Let ’ s see an example.,
Sanamuotoa muita sitoutua viestejä, ottaa 2
oletetaan, että haluan muotoilla viimeksi 4 sitoutuu tämän blogin. En sitten ajaagit rebase -i HEAD~4
, ja tässä on mitä näen:
pick 07c5abd Introduce OpenPGP and teach basic usage pick de9b1eb Fix PostChecker::Post#urls pick 3e7ee36 Hey kids, stop all the highlighting pick fa20af3 git interactive rebase, squash, amend # Rebase 8db7e8b..fa20af3 onto 8db7e8b # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
näemme neljä viime syyllistyy, vanhemmasta uudempaan. Katso kommentti alla thelist of situes? Hyvin selitetty, git! pick
(p
lyhyen) on defaultaction. Tällöin se hakisi sitoumuksen uudelleen sellaisenaan, ei muutoksia sen sisältöön tai viestiin. Tämän tiedoston tallentaminen (ja toteutus) ei muuttaisi arkistoa.,
Jos sanon reword
(r
lyhyen) on tehnyt haluan edit:
pick 07c5abd Introduce OpenPGP and teach basic usage pick de9b1eb Fix PostChecker::Post#urls r 3e7ee36 Hey kids, stop all the highlighting pick fa20af3 git interactive rebase, squash, amend
Kun en tallenna ja sulje editori, git seuraa kuvatut komennot, landingmyself osaksi editori jälleen koska jos minulla oli muutettu tehnyt 3e7ee36
. Voin muokata thatcommit viesti, tallenna ja sulje editori, ja tässä on tuotos:
Nyt Caleb sanoo, että hänen sitoutua viesti ”Stop kaikki esiin”, onko olet lapsi tai ei.
Achievement Unlocked! Voit nyt muuttaa minkä tahansa haluamasi viestin., Voit tehdä niin, varmista vain, että ymmärrät ”vaara” osa.
Squash sitoutuu yhdessä
Kaksi muuta komentoja interaktiivinen rebase tarjoaa meille ovat:
-
squash
(s
lyhyt), joka melds sitoutua osaksi edellinen (josta linja ennen) -
fixup
(f
lyhyt), joka toimii kuin ”squash”, mutta hylkää tämän tehnyt’smessage
jatkamme työtä rebase esimerkiksi meidän workedbefore., Meillä oli neljä sitoutuu, minun oma blogi, kolme muita Caleb, jotka liittyivät hänen edellinen viesti PGP:
pick 07c5abd Introduce OpenPGP and teach basic usage pick de9b1eb Fix PostChecker::Post#urls pick 3e7ee36 Hey kids, stop all the highlighting pick fa20af3 git interactive rebase, squash, amend
oletetaan, että haluan sulautua Calebin sitoutuu yhdessä, koska he kuuluvat samaan loogiseen changeset, ja niin voimme git revert
sen helposti, jos löydämme weprefer ei ole näitä muutoksia tässä arkistossa. Haluamme pitää ensimmäisen sitoutumisviestin, – ja litistää kaksi seuraavaa sitoumusta previousoneen., En vaihda pick
ja squash
tarvittaessa:
pick 07c5abd Introduce OpenPGP and teach basic usage s de9b1eb Fix PostChecker::Post#urls s 3e7ee36 Hey kids, stop all the highlighting pick fa20af3 git interactive rebase, squash, amend
Tallenna, ja minä maa toimittaja päättää commit-viesti meldedthree sitoutuu (katso, miten ne on yhdistetty yksi toisensa jälkeen):
# This is a combination of 3 commits. # The first commit's message is: Introduce OpenPGP and teach basic usage Besides demystifying a relatively complex tool, protocol, and etiquette, this post is intended to help with problems such as the one outlined in this tweet: > Emailed sensitive info to someone with PGP. They replied, with my > original email, all in clear text. They didn't realize it. # This is the 2nd commit message: Fix PostChecker::Post#urls # This is the 3rd commit message: Hey kids, stop all the highlighting # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Author: Caleb Hearth # Date: Tue Sep 2 09:39:07 2014 -0500 # # rebase in progress; onto 71d4789 # You are currently editing a commit while rebasing branch 'tc-git-rebase' on '71d4789'.
päätän poistaa kolmannen commit-viesti, ja lisää enemmän merkitystä huomautus toisen commit-viesti. Pelasta toimittaja, ja neljä sitoumusta muutettiin kahdeksi: yksi Calebista, ja minun jälkeen. Hyvä!,
– Olisimme voineet käyttää fixup
komento, jos olimme nähneet aiemmin, että haluamme thechanges, mutta ei commit-viesti, kolmannen sitoutua. Siinä tapauksessa, thecommands olisi näyttänyt:
pick 07c5abd Introduce OpenPGP and teach basic usage s de9b1eb Fix PostChecker::Post#urls f 3e7ee36 Hey kids, stop all the highlighting pick fa20af3 git interactive rebase, squash, amend
Kun tallennettu, toimittaja olisi mukana kolmannen sitoutua viesti alreadycommented meille:
Tallenna, ja lähdöt:
Tulos on sama: 2 sitoutuu sijaan 4, joissa jokaisessa on yksi, erilainen kirjoitus.
Achievement Unlocked! Voit nyt yhdistää sitoumukset yhteen. Varokaa vaaraosastoa.,
Rebase päälle mestari
Me haarukka avoimen lähdekoodin kirjasto, alkaa työstää ominaisuus, haara, ja master avaimia alkupään hanke liikkuu eteenpäin. Meidän historia näyttää:
A---B---C feature / D---E---F---G upstream/master
kirjaston ylläpitäjä kysyy, mitä ”rebase päälle master”, niin voimme korjata mahdolliset mergeconflicts, joka voi syntyä sekä oksat, ja pitää meidän changeset yhdessä.Ylläpitäjä haluaisi nähdä historia, kuten:
A'--B'--C' feature / D---E---F---G upstream/master
haluamme uudelleen meidän sitoutuu, yksi kerrallaan, jotta, päälle ylävirtaan on mestari.,Kuulostaa rebase-komennon kuvaukselta! Katsotaanpa mitä komentoja wouldland meidät haluttu skenaario:
# Point our `upstream` remote to the original fork git remote add upstream https://github.com/thoughtbot/factory_girl.git # Fetch latest commits from `upstream` (the original fork) git fetch upstream # Checkout our feature branch git checkout feature # Reapply it onto upstream's master git rebase upstream/master # Fix conflicts, then `git rebase --continue`, repeat until done # Push to our fork git push --force origin feature
Saavutus Auki! Ominaisuushaaraasi sovelletaan alkuperäisen haarukan uusimman päällikön päällä.
Ja niin me saamme…
VAARA: Olet uudelleenkirjoitus historia
Katso --force
viime git push
komento? Se tarkoittaa, että me ylikirjoitamme repositoryn historian., Tämä on aina turvallista tehdä sitoutuu emme jaa muiden tiimin jäsenet, tai oksat, jotka kuuluvat meille (katso minun nimikirjaimet theexample tämä blogi).
Mutta jos voima työntää painoksia, jotka olivat jo jaettu joukkue (commitsthat olemassa ulkopuolella repository, kuten tekemäni muutokset PGP commitsthat on jo jaettu), niin jokainen haara saa pois sync.
historian uudelleenkirjoittaminen tarkoittaa olemassa olevista sitoumuksista luopumista ja uusien luomista, jotka voivat olla hyvin samanlaisia, mutta ovat erilaisia., Jos muut pohja työstää previouscommits, ja sitten voit kirjoittaa ja voima-työnnä sitoutuu, joukkue memberswill on uudelleen yhdistää työnsä (jos he huomaavat mahdollinen menetys).
Klo thoughtbot me etuliite meidän oksat meidän nimikirjaimet, signalointi, että thosecommits voi saada uusiksi ja toiset ei pitäisi lisätä sitoutuu haara. Kun maa siirtyy isännälle tai jaetulle haaralle, emme enää koskaan kirjoita niitä uusiksi.
Niin kirjoittaa git historia, edellyttäen uusiksi sitoutuu olemassa vain yourrepository, tai sinä ja tiimisi tietää, että kukaan muu olisi pohja pois heistä.,
Achievement Unlocked! Nyt osaat taantua samalla kun olet agood citizen.