Welcome to Our Website

Git Interactive Rebase, Squash, Amend and Other Ways of Rewriting History

“Please rebase on top of master and we ‘ll merge your pull request”.

” össze tudná szedni a kötelességét, hogy tiszta, visszafordítható githisztóriát kapjunk?”.

” átírhatja a commit üzenetét, hogy jobban leírja a problémát, és hogyan oldja meg?”.

Az ilyen kérdéseket gyakran kérik a húzási kérésekben. Lássuk, miért őklétezik, hogyan kell végrehajtani őket, valamint a lehetséges problémákat.,

Reword az utolsó commit üzenet

az egyik legegyszerűbb történelem átírja tehetünk git megváltoztatja a lastcommit üzenetet. Tegyük fel, hogy közvetlenül egy elkövetés után Talál egy elírás, vagy talál egy jobb módszert a változáskészlet leírására. A program futtatásához:

git commit --amend 

megnyit egy szerkesztőtaz utolsó commit üzenettel, így módosíthatja azt. A mentés után egy új kötelezettségvállalásugyanazokkal a változásokkal és az új üzenettel jön létre, amely felváltja a kötelezettségvállalásotaz előző üzenettel.,

Ez hasznos lehet olyan fájlok beillesztéséhez, amelyeket elfelejtett követni, vagy magában foglaljamódosítások az éppen elindított fájlokhoz. Ehhez hozzáadhatja a módosításokatés végezze el a módosítást:

git add README.md config/routes.rb git rm notes.txt git commit --amend 

a commit üzenet szerkesztésén kívül az új commit tartalmazza a változásokata git add és git rm. Szerkesztheti a szerzőt is. Forexample:

git commit --amend --author="Tute Costa and Dan Croak <[email protected]>" 

Achievement Unlocked!, Most már módosíthatja az utolsó commit of your repository, hogy újabb módosításokat a fájlokat, és / vagy javítani thecommit üzenetet. De ne kezdje el módosítani az összes dolgot, mielőtt megértené a “veszély”című blogbejegyzés utolsó szakaszát.

Reword egyéb commit üzenetek

szeretnék beszélni erről most, de meg kell értenünk egy általánosabbateszköz előtt. Maradjanak velünk! Minden más könnyebb lesz, ha elolvastuk a …

interaktív Rebase

git rebase újra kell alkalmazni a kötelezettségvállalásokat, egyenként, annak érdekében, hogy a jelenlegi ágról a másikra., Több lehetőséget és paramétert is Elfogad, tehát ez a jéghegy csúcsa, ami elég ahhoz, hogy a StackOverflow vagy a GitHub comments és a git man oldalai között áthidaljuk a kapcsolatot.

egy érdekes lehetőség, amelyet elfogad, a--interactive (-i röviden), amely megnyit egy szerkesztőt a megváltoztatandó kötelezettségvállalások listájával. Ez a lista parancsokat fogad el, így a felhasználó szerkesztheti a listát a therebase művelet megkezdése előtt.

nézzünk egy példát.,

Reword egyéb commit üzenetek, hogy 2

tegyük fel, hogy azt akarom, hogy átírja az utolsó 4 elkötelezi magát a blog. Ezután futok git rebase -i HEAD~4, és itt van, amit látok:

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 

látjuk a négy utolsó elköteleződést, az idősebbektől az újabbig. Lásd az alábbi megjegyzést: theist of commit? Szép volt elmagyarázni, git! pick (p röviden) a defaultaction. Ebben az esetben újra alkalmazná az elkövetést, ahogy van, nincs módosításkapcsolatok vagy üzenet. Mentése (és végrehajtása) ez a fájl nem változtatnaaz adattár.,

Ha azt mondom reword (r röviden) egy commit szeretnék szerkeszteni:

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 

amikor mentem és kilépek a szerkesztőből, a git követi a leírt parancsokat, landingmyself be a szerkesztő újra, mintha módosítottam volna commit3e7ee36. Szerkesztem ezt az üzenetet, mentem és kilépek a szerkesztőből, és itt van a kimenet:

most Caleb azt mondja a commit üzenetében: “állítsd le az összes kiemelést”, akár gyerek vagy sem.

eredmény nyitva! Most megváltoztathatja bármelyik üzenetétajánlatot szeretne., Ezt megteheti, csak győződjön meg róla, hogy megérti a “veszély”részt.

Squash vállalja, együtt

Két másik parancsok rebase interaktív kínál nekünk:

  • squash (s rövid), amely ötvözi a vállalják be az előző (rész a vonal előtt)
  • fixup (f rövid), amely úgy viselkedik, mint a “squash”, de megválik, megválni ezt elkövetni’smessage

majd folytassuk a rebase példa workedbefore., Négy követ el, a magam számára ezt a blogbejegyzést, andthree mások Caleb, amely kapcsolódott az előző post 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 

mondjuk azt akarom, hogy egyesítést Caleb követ el együtt, azért, mert tartoznak ugyanez a logikai changeset, így jutottunk git revert könnyen, ha találunk weprefer, hogy nem azok a változások ebben az adattár. Meg akarjuk tartani az első üzenetet, és a két későbbi elköteleződést az előzőbe kell illeszteni., Tudom megváltoztatni pick, hogy a squash adott esetben:

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 

Mentés lehetőséget, majd azt a földet, hogy a szerkesztő dönt a elkövetni üzenet a meldedthree követ el (lásd a hogyan vannak összefűzött, egyiket a másik után):

# 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'. 

én döntöm el, hogy távolítsa el a harmadik követett el üzenetet, majd adjunk hozzá egy több vonatkozó megjegyzés, hogy a második követett el az üzenetet. Mentsd meg a szerkesztőt, és a négy követ átalakult kettőre: az egyik Caleb-től, az enyém pedig utána. Jó!,

használhattuk volna a fixup parancsot, ha korábban láttuk volna, hogy szeretnénk, de nem a commit üzenet, a harmadik commit. Ebben az esetben a thecommands úgy nézett volna ki, mint:

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 

mentéskor a szerkesztő már tartalmazta volna a harmadik commit üzenetet:

mentés és kimenetek:

az eredmény ugyanaz: 2 commit helyett 4, mindegyik egyetlen, különböző blogpost.

eredmény nyitva! Most már egyesíteni követ együtt. Mint mindig, legyen tudatában a veszély szakasz.,

Rebase a master

tetején egy nyílt forráskódú könyvtárat villázunk, elkezdünk dolgozni egy funkció ágon, és a master inhe upstream projekt halad előre. Történetünk így néz ki:

 A---B---C feature / D---E---F---G upstream/master 

a könyvtár karbantartója kéri, hogy “rebase on top of master”, így kijavítjuk a mergeconfliktusokat, amelyek mindkét ág között felmerülhetnek, és együtt tartjuk a változásainkat.A fenntartó olyan történelmet szeretne látni, mint:

 A'--B'--C' feature / D---E---F---G upstream/master 

szeretnénk újra alkalmazni a kötelezettségvállalásainkat, egyenként, sorrendben, az upstream mesterére.,Úgy hangzik, mint a rebase parancs leírása! Lássuk, milyen parancsok adnának nekünk a kívánt forgatókönyvbe:

# 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 

Achievement Unlocked! A funkció ág kerül alkalmazásra ontop legújabb mestere az eredeti Villa.

tehát eljutunk …

veszély: átírja a történelmet

lásd a --force az utolsó git push parancs? Ez azt jelenti, hogy felülírjuk a múltat., Ez mindig biztonságos, ha nem osztunk meg más csapattagokkal, vagy a hozzánk tartozó fiókokban (lásd a kezdőbetűimet a blogbejegyzés példájában).

de ha kényszeríted a push kiadásokat, amelyeket már megosztottak a csapattal (commitshogy léteznek a tárolómon kívül, mint például a PGP commitsamelyeket már megosztottam), akkor mindenki Fióktelepe kikerül a szinkronizálásból.

a történelem átírása azt jelenti, hogy elhagyjuk a meglévőket és újakat hozunk létre, amelyek nagyon hasonlóak lehetnek, de különbözőek., Ha mások az előző munkádra alapoznakajánlatokat, majd átírod és erőlteted a kötelezőidet, a csapattagjaidnak újra kell egyesíteniük a munkájukat (ha észreveszik a potenciális veszteséget).

at thoughtbot we prefix our branch with our initials, signaling that thosecommits may get rewritten and others shouldn ‘ t add committs to the branch. Amikor a föld gazdává vagy közös ággá válik, soha többé nem írjuk át őket.

tehát írja át a git előzményeit, feltéve, hogy az újraírt követések csak a saját körzetében léteznek, vagy Ön és csapata tudja,hogy senki más nem alapozhatja meg a munkát.,

eredmény nyitva! Most már tudja, hogyan kell rebase, miközben agood állampolgár.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük