“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.