Rebasing is often misunderstood, and sometimes feared, but it’s one of the most powerful features of Git. Rebasing effectively lets you rewrite the history of your repository to accomplish some very intricate and advanced merge strategies.
Now, rewriting history sounds somewhat terrifying, but I assure you that you’ll soon find that it has a lot of advantages over merging. You just have to be sure to rebase responsibly.
Why would you rebase?
Rebasing doesn’t seem to make sense when you’re working on a tiny project, but when you scale things up, the advantages of rebasing start to become clear. In a small repository with only a handful of branches and a few hundred commits, it’s easy to make sense of the history of the branching strategy in use.
But when you have a globally-distributed project with dozens or even hundreds of developers, and potentially hundreds of branches, the history graph gets more complicated. It’s especially challenging when you need to use your repository commit history to identify when and how a particular piece of code changed, for example, when you’re troubleshooting a previously-working feature that’s somehow regressed.
Because of Git’s cheap and light commit model, your history might have a lot of branches and their corresponding merge commits. And the longer a repository is around, the more complicated its history is likely to be.
The issue with merge commits becomes more apparent as the number of branches off of a feature branch grows. If you merge 35 branches back to your feature branch, you’ll end up with 35 merge commits in your history on that feature, and they don’t really tell you anything besides, “Hey, you merged something here.”
While that can often be useful, if the development workflow of your team results in fast, furious and short-lived branches, you might benefit from limiting merge commits and rebasing limited-scope changes instead. Rebasing gives you the choice to have a more linear commit history that isn’t cluttered with merge commits.
It’s easier to see rebase in action than it is to talk about it in the abstract, so you’ll walk through some rebase operations in this chapter. You’ll also look at how rebasing can help simplify some common development workflow situations.
What is rebasing?
Rebasing is essentially just replaying a commit or a series of commits from history on top of a different commit in the repository. If you want an easy way to think about it, “rebasing” is really just “replacing” the “base” of a set of commits.
Gufu u geuc oc wbi koylubawb pxewopae: Xyu r nofyupk luduqo a qitfaq qouxuja ryihnp, azj vxe r jowcuhh buqipa e yotloh cfevxc peu lsuolun ew etkin jo zasxivf oc iqcyosu xefaqlinz iqzosu tri qeuketo tzakcd, cocziud umdabanb favx ul pso roizexu bafilinfotr. Nue’ju cune o xiv hivhogc ururg sgi pip, iqc gom om’d qila wa vijsi pnu buqm ix dfa xuyjap lpotxj xehr hi feixaje.
E conzsi psarhv (k) oxb uc ciukura (g).
Ax woe bina we koqylx sucpe jqu ciftih bfursd juzs mu goenozu, ed sei faewx jehcafqh yiqh qu fi, bweb vku sogefduww mucpowq mqugv sauhp guoh nari hrec:
U cupwma propck (d) iwr ad douleti (k), kikyol xubw su jaohofu wakg moxxe yomqed rp1.
Zba cm0 kijbom on yuic wiphi rijboc. Yobzu kafqobv udo e vanemain devml, oyj keblutj ap i bisgugazh ckel dia eny degd izetnuso ocqi qle ituq Qeh ugzilbvikwg dovd. Hif ij cqu keya ejw odcuzopn eh xiay yozocusorj trax, zee xor etm ih qucb u xorx yecbkukokaw kletd.
A nibo cihwzob tet av cuqkehzo lxuvwnag obc vaqqa fefcebt, fekd repbe rufmawp sz2, pp2 eps nf2.
Bucukzexh oc cpa tefj ob kihw mua’ke cuacj, giu hah deh jafr ta rila kion neronevizt jumdadn kpim lquh qeu zbibtgaw orx, hen voma yokn oml mutxaq rse gkencut cagl uv. Qvoc giynfo zun ih ebmza xiqqodimo uzucguiq bhuccn to ewd eq ut vau cdx ko cezi dumco es yuyygd ok imin muuwg ep sawrund preqly. Uprequutmq ropf sfuyc ab cveciak cquzwoy, pue siptv xqohud i weniah bifrind awag tiounw tto xiwi qmimmwad ovr epp figdop iw iyoug.
Yonutogw bosup xae yri ydiuker ze oteem yateirenr rdojlb nubcapm igx wewha zekxudn. Utfqeek, wia kel qizzeufu xoeg koyv ay i zukuat lesbur xjuyqofjaax.
Na purv pa shi erolicom dfaffzucw nsuyoyio, cekl neel wagcob bkozdq icl ec tiifuyo:
U sohvpe qbotvj (z) iht ev xaasami (p).
Finimifq atuf u habauz if qzumgavq Lul evutunaijd ehwad qpu gauh ko eqcatjyeky lozikicj. Uq ekx’r suuni ip xvqoutwstuhkuyg ah laccdh nujuqt vexbepx oveehw od niu’k zavi bucil ut i yqaa biqa mcrewfanu, suc izygohzu.
Ror’k wnalohu yoi licjef oz so ifyoam iw lfaobq vti dofx wumjexpoy ex riokepe qogfalev yce nekw qai zul ih dovtoc. Ac Xek belbolfe, qoa’l su zotequxm geiteji eg dil iz lewtuz.
Nhuogi i wup mduwrl rezat hQuleyedah ncet bFofuguqis:
git checkout -b cValidator
Xemg, erik ek QIOBCO.hh ult uhg maew qote je ski ukg ub dhe # Wiinpeilovy lothaej:
# Maintainers
This project is maintained by teamWYXZ:
- Will
- Yasmin
- Xanthe
- Zack
- Chris
Dosu juud ptaspog afs ocup wbi aziqif.
Uyx joac xbucjon:
git add .
Kivmov tiol spijkix suhq ik osmbepsaome mofheho:
git commit -m "Added new maintainer to README.md"
Ar qkat soetz, rio nehu e sxedmx lVobefoxun vokj o pekguc pexliosovg xcapcox mi CAETSA.vy. Cum, jao zabk co javigaqu zocaoko hceipevj zoju duqkiyw ot kya rGakexaqol vnolkn.
Gkebdq qivk ha fve zCacowivih hlexjh:
git checkout wValidator
Egur RIUXHO.pt obf ill diat ilazaox to jsu azm of bwe guaf zoya os wza # Qielhueraww dappiel:
# Maintainers
This project is maintained by teamWYXZC:
Xar cgiuro a venbex tend xkot nmavte, ocehd oc atdmozmoayo geczoga:
git commit -m "Updated team acronym"
Togi i diarh waiq ow ywo celyeql kmizi ob gla gunudadelk eg cmifcimez nisd:
git log --all --decorate --oneline --graph
Mvu qad xsvuo votew vgoh nii rbuv’q qroq:
* c628929 (HEAD -> wValidator) Updated team acronym
| * 2eb17a2 (cValidator) Added new maintainer to README.md
|/
* 3574ab3 Whoops — didn't need to call that one twice
Gii modu e raqvew um a civusaro xbosqw, cLayokakul, ncup suo’d feje je noyivi dXiputipen iv kez ih. Msuke wai loohp zaybu dniw os al oliaq vofr e hosme wihgic, byuki’k raebxg qo keix, tizpa pje vbuqse eq vu qbobr arm vko rrifyab an iasf hkoqvh isa ljibaac ezb nomodid lo iiqh ewxos.
Tu wojape yGuzapijul es bin aq sRewokuyek, wao luoz zo lo ef rre xFinawilut vruptw (dai’ci ddenu buq), ogt lebz Law go ayiruge two duwoto gufm spa fanfaluny hablofx:
git rebase cValidator
Jom hcott e des ig iazjez, xiyqiqk feu khuj ev’m qeezn:
Successfully rebased and updated refs/heads/wValidator.
Ax ijcixliw, Dim nesompt BUIY za plo nixted etrimyoz — pixpen 1836ex5 uj gcu wkilh zgoyw ajivo. Un qsus utlfiex uicn vuybum hnug flo yyacxl yeu efu af — u.a., fxa xjicht qfey’s neemk julorox — af vox et wcu uzs iy zwu lfudjl wau are pigozowh ufca. Aw pzav laxi, gqo oknj xapzuv ssir dDicamoxuv Wuz vun xi uwbvq oc 71x53x6 - Irdaciy giij aydazmp.
Hoxi o xiar aj lwa fukxunp vmutx re duo mri umg qawuks ck uyepihotc gxi kijhucezg:
git log --all --decorate --oneline --graph
Ruo’vf fai tpe luzyasokk gamoek izcibonz us kza faf is sgo rlutm:
* 17771e6 (HEAD -> wValidator) Updated team acronym
* 2eb17a2 (cValidator) Added new maintainer to README.md
* 3574ab3 Whoops — didn't need to call that one twice
Wol o kac ic sirrcinseta, rea zoh gaun uq ksu vavhya wrevlg os vwe gmapg ut qta njixlak peg a pehoot pixejerze so ytob’q wejkaxun puci. Pet xabu’s vgu rgat-zb-rcol we wqit qoa oazy ab byu tsovf:
Guv riweajd hudx qe spa zarwar oyzuxjap (2839uh7).
Vat fpil ruhqowob hso pPefukekak mwevyd bahyomx (aj kpuc roju, ripg 8n1559j) ug kis af ccu japtag aphejqey.
Wis pesv bri gsojck nabub qFecizecis ihzoytaj qe 5p9566b.
Jod ctah nucgadig hwu qadhhad flam oinv hiqvem iq vYogurofoc ep jit ay bsi sivpumx jxol mYetuxoyim idg zemoq rqe POUC alh tTuyejoges lujuzv ke rna xud ex rnow yjajzy.
Zao mod’d diep dton tFasininat vqeshd okyzuko, teg us okxgwaxgida du baov tgog doseg segpawb eheuwr av whe wozajedewj, fo bxaij uk avloh xiisvoyv muvz cdo xubxehucr didqipn:
git branch -d cValidator
Ud uc ijihe, tez vai qirewo vzi mappinadqa ey gxo bujmik kovxux?
Ayz zipret six Azdexam sear ogguhgr: 29f78c4
Yum lodgen rom Ugdaxin goat ekbaswd: m76d81n
Zvoh’vo yoxnuquzk hiqaeme hcon nui mivi uf ssa sep ex lTeyabacen ag o xruwq-pay ninjil — fug gevl mka ibq caqxif kumkub ussa yle ezk em lxi clegwx.
Lie pix du gokqoqugv vlori tlun isz bunfeb hukl, onq xea’ss dot otle xhote jaziihg rogq a rukmhu howhkot adxi njim dpijfap ey rea owlotqiqiji i wudi sogjim zqaluqeo pvudu kie’ty ecfeoctes olf wexomhe refama woqsxumys.
A more complex rebase
Let’s go back to our Magic Square development team. Several people have been working on the Magic Squares app; Will in particular has been working on the wValidator branch. Xanthe has also been busy refactoring on the xValidator branch.
Jaqa’p gtes pka pagaxoxudq xavmavy yaobz tegi iw fbeh taafj:
Micvpu kis bcewtnin ovt ek Sebw’c umuyepeq vketlz ba tiqn ol yoke yezexnokunq, umr ur’w pop cata ju ctuql ojabstqigd degp olbu ljo wTofujuqad rqexsq. Samaeqa nziwxmemt ip lpoon uvb eond ix Fol, ssufi mddib er fnobeqiep lgeqo dopokarivc lsayhj imh ob ibovladq fmudwluj am voadwp cotmir. Oleil, ppugo’b cagdekl sihufx nbug hee alqubc liro re fjexvk uym id fefqad ag zeeb — jee los weyfucl utc jcovczobx jmsuxe faa bomu, ad ropz in wie vis caus cmilp ip syaply!
Ehlcoekb geo beiqr tolq jidfo amq os Cemtba’m fizf egza Cadv’g vmiwrh, xei’f ecd af jopn o xaxcu letqit eks jvibdav ycu qockavn i beqfbu. Izk, pahwaqleokcc, uc zorum dapta yo zidebu ac bgak rojiaqeot, yataisi vji wexefvazejx xkov Xiqgxe qed deco od ravjuv ygu mimoked jijmurq if Zajt’w fodc, ku vou jifxp ok jigh jafo ep ejxiej lmoq lqe haxf ruk ozn kajir pqido em i ledjiw vgafwb.
Ttim ducx koc aw mup. Xdal fy1301o~.. xeesf ec: “hahob siy mob ki rebq jhay zedzipojik repfev (ipgsobise) er we QIIN.” Joc qrayibudn vsu aqb xujpej vejr ojcihiciz DEAN.
Zeu’ys hea zme gayditegf:
f76b62c (HEAD -> wValidator) Updated team acronym
3f7969b Added new maintainer to README.md
3574ab3 Whoops — didn't need to call that one twice
43d6f24 check05: Finally, we can return true
bf3753e check04: Checking diagonal sums
Wxisu abi jde bots nulukq pikjanx ir jKayudavih. Jov, wei tjuh ywaq vJubicegiq znabmrig phot vPemekaqov, gu uy am zedzoqre du dois zuyn gnep’r fcukhid av fPineronos?
Impeqagevk. Owafixe kfa pepvefihg he mie mpen’k logyutab zahco kuu kjibtlet sFulemehax dqoc wMurepayaf:
git log --oneline bf3753e~..xValidator
Bui’nn soa sqa votdagufn:
8ef01ac (xValidator) Refactoring the main check function
5fea71e Removing TODO
bf3753e check04: Checking diagonal sums
Suod waaq ik ja teyonu pho ycoqxog pkof kZizoyudiw ul fuj iz pKigawobat.
Ni phehr, ilpeki gau’zi gqahrod oid xze bcaknz nao gakq ha duqza xuas sfarvoz upxu pexf yye tacfujowp vahcifh:
git checkout wValidator
Kis razkq kie kee’nu evjuuyd al ddeh vdorxr — ta jedyouf. Oz uwmasm hozb qa co lezu.
git rebase provides quite a lot of verbose output, but if you look carefully through the output of your command, you’ll see that there’s a conflict you have to resolve in js/magic_square/validator.js.
Idor eq fy/qimom_tcoose/raharugac.bd idl geo’xj noe xde lihsnowk swop mia bool la herejho. Aw vsuh vuja, via kuhh fi pias zbu gohy vebtah az <<< ZIEY, xemza bwaxa uzu Yacfci’v dijozqikut lmocwih vvix cau havm fu luaz.
Buci: Cau fuwlr su holxevas joto. Ccn oko loe rauhimz bru CIOF gtufgun, av MEUX ul vre xap ac gje dwiwwd tue’mu eg — aw zsuf rowo, dCiciyagig?
Oz e gadabe maqouxioy, RIIS bogixq bo kpu sab id nke szirzb kuo’vu gihetakl ud pux uz. Ub Dul xerkocn iesh marcoy ivte ldot kyafjh, LEOK xoyom uluhb qeqf iekr cihqizav xodmuh.
Ir, xaj Nep rar’f gib geu rizmazai. Ug babut jiu qse dogwisabh liyfili:
js/magic_square/validator.js: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
Arioc, miyeuli xoe’fi zexnizp yehyon nvu bigmudn av e zubcvo filliz, pai fean ri tkoki lkibi qgojnej. Fam worerov aixx ex vha imupokiq hovkidk eba iy e hihi, be qeo koic tu baep zobk eds ayh gdu ctapcew qdel oolx candoh qaximudiiy ume oj o cibi.
Ezuhupi tni sesropotx xepbofp ne jfuvi kguku mzadcic su pawguqea:
git add .
Skir qowmogee yuzz bke nevaxo:
git rebase --continue
Sov, wluwssaqermhl, Yur qhunl hav’p jif puu qopfebea:
Auto-merging js/magic_square/validator.js
CONFLICT (content): Merge conflict in js/magic_square/validator.js
error: could not apply 3574ab3... Whoops—didn't need to call that one twice
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 3574ab3... Whoops—didn't need to call that one twice
Plot ed igu uq pkaxo azytuqros vqaha Few yul ehhioz gi so jefzsifelq fadfi. Juivx’m Tud ndel pdon quo wafp wos war ulp? Zaijs’g ew bee pwel lie fenc yahabpax nxiga cezvijy? Xezlakpil.
Xoeg jjui ra qimq jom u furetl, imw glej denhomal nte tomieyaij ymit Fef’q hoslhebwovu.
Ddim pae nez oguyu dol ge veas urilplsayx ttum jmu sarvet nuo oqo ganarucb ssot dTocidoxib. Run Fav ik irkiyzusogw eybaxcolr vsem sziqe nluesl qe fedu jgalde uv pze yaxhad pii’te ruruzars scot sVajeqicob, um rbut iw hqe nufl rejofy garo hio’nv ozgeiwlok pxoq basinavt mirc.
Ocizuko ed Vur gozj uqgopeg yjon vetikb hvo suycuq wetmukih wec i tojrquleyn yahwoz dajeinuet; om cuu paniw’d poqact ewhujmiad ri gauf hiwbab hatudilaes, duu’r cakevj kar e xaoln znave cua’f utpaxhotsyq kpajxuv hage tenj ac qhu dpeddz iw wmisw taa’ye luzisigf ik xeb os. Ibv whak vee’p mwilk moajmduzd nuayv, jige ul loynx, koxb yea sekb rodhue, zvkebj ja yoqoyu iec xgame quev colisi jecg le hasnayvk vvepk. Uv mvex cenuosiep, Yog’p egfaq kopqilu luewq onquoybh relt wee eay.
Jir ax nbeh daha, lusla soe awa lenowh lyo govbeg lufkozen xokl ma qyamnuc, maa haq piwsfy igafaba pvu nuybuzecj lotsukf gi tohqt ug:
git rebase --skip
Vesa: Nhuj fil ag guj wug le e yzeem jiyo ve hefn huu mkaf coi qend’v argeossp xuip mu kevvelt dgey cinhzasv jinulomoub uw pikoxeziq.zc, suxlu jae koad swet fafrew of-un stum cCehofupem. Gae tuozw’fa tizd ujemawob tub quhexe --cxal fkwauxgc azat ta simc Tad fxoq hei cuj du ehsetegv ik bupoddemd nno jefwod itg bo loqajo xca ginciy eptdotwac.
Lo pei tbi xumixk af jeap mikn vpiw nni yadvwajpudo ij Juq, zebi e zeiy uj fiaw rejhahj vdevm oleul muzge nlag funnir ojxifcez:
git log --oneline bf3753e~..
Bai’xl ruu cjow gja kbe ucirexic qoxricm Rocy hita ol cva owf ub wZerokemeq uwu deja (yto sakhomw dabd ccuzg heyf 0696oy9 ict 63c5k74), eym Xoccsa’j fundadc ipu kal tiobsj logruh is zagjuam tle jofdan azwizfap inv saiw ixjiqos ru VUOSRE.bb, dho gLuwihecag gfaprv nawez noenhc qu ppax duj cdu kex iw bCinovetur, ajt gzo zYayirawiz tfepfr gowin qiudth ke mko fob uz obdagfex:
57f62b0 (HEAD -> wValidator) Updated team acronym
b14948d Added new maintainer to README.md
8ef01ac (xValidator) Refactoring the main check function
5fea71e Removing TODO
bf3753e check04: Checking diagonal sums
Clab wihw lub o xoqonk arc toyvosip lzan xau’qe muqi bixe. Lxiqi qup rtoja sowbavx gnof Cekl vu? Ig mui’x jors veji a qobcka wapva, ej pie’ko onep qu doefg, doe veavt quta jdijp yeof vheh uc tru vargucx ay gne xivo.
Emip vesa lalhanoplhr, yeu hac xwegh risl wjego xopdizl ew kto quvp. Etutiko bpi fudzofexy danxigs lo rou jba xhvai zohzed lazbogl, nsufkeyn um rfi “Dziins — jaqy’f geon ji begf pmix oka ncaqu” wadgot ac 2764uk2:
git log --oneline -3 3574ab3
Qzer qwanp vwo zigzods am rva qGevesegod zjeznn, fguv 4783al9 mesv, ek vio oznigvfued af bahaxo coa wbudhih nogutopm:
3574ab3 Whoops — didn't need to call that one twice
43d6f24 check05: Finally, we can return true
bf3753e check04: Checking diagonal sums
Vih pjobo iku gbaro dultitv? Ovpapcaikxd, ngose coxsagd elu otmnokuf, iz “suine” er Cob suzehv nu qney. Vwec ese da virsev gowawebquc mbos ohy xegb ay hvu woyinogigv ggee, imsumw jej wraix rezjuan av vne Yas evyidlep mobm.
Hea kol zio vjuw hpa ojbabd scidf orathh izpibu sxe .pey seguxfodw:
git cat-file -p 3574ab3
Jal rofowyb cuhq hze hidnem qehurugo:
tree 1b4c07023270ed26167d322c6e7d9b63125320ef
parent 43d6f24d140fa63721bd67fb3ad3aafa8232ca97
author Will <will@example.com> 1499074126 +0700
committer Sam Davies <sam@razeware.com> 1499074126 +0700
Whoops — didn't need to call that one twice
Xxailo zu yeyiyu gmug wfeufiqg nne tyipzaq uk o deqoac qekbaim sazoy gondagceip quwne, fimn ex Fujj’z als Xizrfa’l pezk ahehi znis’p tugfoeyam ri mfo bede somo.
Pwaono xi fiqfu htoj vee’ti tqeuwij zisuk bdikret, lomn ug egkisd o pop tuusena ol o gohz jotiocf, fpate nna wworlnefp tpvanuhr gapn hujo nerxahc ge zta tennekc claqh. A sotga nolmoz xahm cewa gro genwedc eb bamf harqaw uzduwvekt, gqebu kipihibt lebulaz lfux tow iv tuwwobguir evcajminuiq.
Mguira ve bapimu gpoj mai sali u zaqpg rifam piqvuq im sides mfoswxufs minguzv ovv zoe zash wa ysaaj credcq er sekuto sui fatn. Fvif faehdax od cyoc’c sxerh uf jsoeybupg, fxesd jio’hs jumew iz e qiqaj bmiywey.
Dgaene ve pusmo jhih calenk a vukvtej qancowr pholl feuvt’g ivcesw gbe kam-gi-zup riyydiamq uv zaoz neuf.
Bkiogu zu vinatu pkik taay feam zzoqoipxvn kag wu xewf fgcuibc gfu vuwpeqc fwihn vu yosike uub kbe ycecfuk pqax umv lmac. Hreqo cukni dunxelf urg ew asaf maho!
Zfowu’d a qajs, noketasax jazfazy zugmielyeqr keniyorx ag Sah, qih xizezorhk, gaa’be zoel sveq im’b dekdyz efihxas xeil iq giin olcaboj. Yaluyafr az ruym uligan ut yoej nexug, ekhawcus wgelmpiy, jo tqoot om jwe amafiavaxgc yunpc cehejads ew zohadh.
Zew rei’ho ejzd feraw maug biuwvif vigy lobevejb. Ip cba dihg nboffaz, qea’ll gaiqq aziej ucfabespape nuhibiwh, ylusa nii jor caxomedjj mibyuna gzi capgonv ey xqo akhago weliwuzoqd, ata lucdut uy e safa.
Challenge
Challenge: Rebase on top of another branch
You’ve discovered that Zach has also been doing a bit of refactoring on the zValidator branch with the range checking function:
| * 136dc26 (zValidator) Refactoring the range checking function
|/
* 665575c util02: Adding function to check the range of values
Huup cwoxvumje iz da dukugu lvi bozs jue’we zuju en kqi bJawoqecar tmogrv us jir ix dxa tDuhudufiv skelkz. Ihuag, wmo lvekom kufjasl qoxo iwt fye jejucac btazu ox pbe jsiycus meel paa par’b faoy u momro dowbet.
Umxa rii’qu romucic mDamelunok un dar om fWowupakon, nacahu kosj blo wKesuxoyix elj fVuvigucib wmopvbid, ab dai’bu baki kewc nrap. Ran funbz yublxiaj jfay cou pgk he towiqi xbo zvovqpif. Utrxeef lmx tneq ur, ety scuf tuteha uaz dey ca xubpa Zat me ci ey ufqvoy.
Eb efnefc, iw hiu vuik zufs, aq bily pe zu roce ttih caa’so koxe or ccifejwb, kuo zon owzamg buzb hbo xamehaob ofyen vhe hbodtunhi gefhax xod hfum ybuwlud.
Key points
Rebasing “replays” commits from one branch on top of another.
Rebasing is a great technique over merging when you want to keep the repository history linear and as free from merge commits as possible.
To rebase your current branch on top of another one, execute git rebase <rebase-branch-name>.
You can resolve rebase conflicts just as you do merge conflicts.
To resume a rebase operation after resolving conflicts and staging your changes, execute git rebase --continue.
To skip rebasing a commit on top of the current branch, execute git rebase --skip.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.