Git - reset közzététele titkok
Állítsa vissza a közzététel titkok
három fa
Deal visszaállító parancsok és pénztár könnyebb lesz, ha azt feltételezzük, hogy a tartalma Git kezeli a három különböző fák. Itt, a „fa”, mi azt jelenti, „egy sor fájl”, és nem egy speciális adatszerkezet. (Bizonyos esetekben, az index nem viselkedik pontosan olyan, mint a fa, de a jelenlegi célra könnyebb bemutatni, hogy ez így.)
Normális működését, Git működik három fa:
HEAD - a mutató az aktuális ág, amely viszont egy mutató az utolsó végrehajtási készült ebben a témában. Ez azt jelenti, hogy a szülő lesz HEAD létre kell hozni egy elkövetni. Általános szabály, hogy a legegyszerűbb megfontoltabb HEAD pillanatkép a legutóbbi elkövetni.
Tény, hogy elég könnyen belátható, hogy ez egy pillanatkép. Az alábbiakban egy példát, hogy megszerezze a könyvtár tartalmát, és az ellenőrző összegeket az egyes fájlok a HEAD:
cat-file parancsot, és ls-fa a „hivatalos” (vízvezeték) parancsok belsőleg használt és nem szükséges a napi munka, de segítenek megérteni, mi is történik valójában.
Index - ez a következő tervezett véglegesítés. Azt is említette ezt a fogalmat, mint a „staging területen változásokat” Git - mi Git néz futtatásakor git commit.
Git feltölti az index lista az eredeti minden fájl tartalmát, hogy terheletlen utoljára abba a könyvtárba. Akkor részben pótolja ezeket a fájlokat az új verziók és a „git commit” parancsot átalakítja a változás a fa az új elkövetni.
Ismét itt a szolgáltatás igénybevételéhez ls-fájlokat. ami azt mutatja meg, hogyan néz ki most a kódját.
Technikailag az index nem egy fa struktúra, sőt, ez végre egy tömörített lista (lapított manifeszt) -, de a mi szempontunkból ez az ábrázolás elegendő.
munkakönyvtárba
Végül van egy működő könyvtár. Két másik fák megtartják tartalmának hatékony, de kényelmetlen belsejébe .git könyvtárban. Working Termék kicsomagolja azt a tényleges fájlok, így könnyebb szerkeszteni őket. Tekintsük munkakönyvtárba homokozóban. ahol ki lehet próbálni a módosításokat, mielőtt elkötelezné őket az index (átmeneti terület változások), majd a történelemben.
folyamat
A fő célja a Git - takarít a képek állandóan javítja a feltétele a projekt szabályozásával a három fák.
Ebben a szakaszban csak a dolgozó könyvtárfát adatait tartalmazza.
Most szeretnénk elkövetni egy fájl, így használjuk git hozzá, hogy másolja a tartalmát a munka könyvtár az Index.
Aztán, mi végre a parancsot git commit. amely tárolja a tartalmát az index megváltoztathatatlan pillanatfelvétel létrehoz egy objektumot, amely elkövetni rámutat a pillanatfelvétel, és frissíti a mester, hogy ez is rámutatott arra, hogy kötelezzék.
Ha most fut git állapotát. nem fogjuk látni semmi változást, hiszen mindhárom ugyanazon a fán.
Most szeretnénk, hogy módosítsa a fájlt, és zakomitit azt. Mi megy végig ugyanazon eljárás Először szerkeszteni a fájlt a következő munkanapon könyvtárban. Nevezzük ezt v2 verziója a fájl, és jelezzük a piros.
Most, ha futunk git állapotát. azt látjuk, hogy a fájl pirossal kiemelt részében az „A változások nem hajlandó elkövetni”, ahogy azt képviseli az index és a munka könyvtár más. Aztán futunk git hozzá ezt a fájlt, hogy azt az index.
Most, ha futunk git állapotát. azt látjuk, hogy a fájl zöld színnel a „Változások, hogy zakommicheny”, mint index és a fej különböző - azaz, a következő tervezett elkövetni most eltér az utolsó elkövetni. Végül, mi fut git commit. hogy végre a véglegesítés.
Most git status parancs nem mutat semmit, mert megint mindhárom ugyanazon a fán.
Váltás ágak és a klónozás megy keresztül egy hasonló folyamat. Amikor bekapcsoljuk (pénztár) a fióktelep, HEAD is kezd mutatni egy új ága, az index helyébe kép elkövetni ezt a szálat, majd a tartalmát az index másolt munkakönyvtáradba.
kinevezés visszaállítás
Reset parancsot érthetőbbé válik, ha figyelembe vesszük azt a fentiek fényében.
Az alábbi példák azt feltételezik, hogy ismét változott a file.txt fájlt, és követnek el, hogy egy harmadik alkalommal. Így a történet most így néz ki:
Térjünk most nyoma alaposan, hogy mi történik, ha hívja vissza. Ez a parancs egy egyszerű és kiszámítható módon kezeli a három fa, hogy létezik a Git. Ellátja három alapvető műveleteket.
1. lépés: Mozgás HEAD
Az első dolog, hogy majd visszaállítás - mozog, hogy amint azt a HEAD. Jegyezzük meg, hogy nem maga a változás HEAD (mi történik, ha a pénztár parancs); vissza mozog az ág mutatott HEAD. Így, ha a HEAD pontot ág master (azaz, ha dolgozik a mester ág), a végrehajtás git visszaállítás 9e5e6a4 csapat gondoskodik arról, hogy a mester jelzi 9e5e6a4.
Nem számít, melyik lehetőséget hívott reset parancsot a véglegesítés (újraindítás is lehet nevezni a pálya), akkor mindig megpróbál, hogy először a mozgásban. Amikor hívja a reset --soft ezen a parancsot, és megáll.
Most megnézzük a táblázatot, és próbálja megérteni, mi történt: az utolsó parancs git commit ténylegesen törölték. Amikor futtatja git commit. Git létrehoz egy új entitás, és áthelyezi egy ága, rámutatott a HEAD. Ha alaphelyzetbe a HEAD
(HEAD szülő), mozgatja az ág, ahol korábban volt, megváltoztatása nélkül index vagy dolgozik könyvtárban. Tudod frissíteni a mutató és futás git commit újra. ezáltal hasonló, ami a parancs git commit --amend (lásd módosítása az utolsó commit).
2. lépés: Az index frissítése (--mixed)
Vegye figyelembe, hogy ha volt, hogy futtatni a git állapotát. látni fogja a zöld színnel jelölt közötti változást Index és az új HEAD.
A következő dolog fog állítani. Index frissíti a tartalmát a pillanatfelvétel által mutatott HEAD.
Ha megadott opció --mixed. újraindítás végrehajtása leáll ebben a lépésben. Ezt a viselkedést is az alapértelmezett, tehát ha nem adsz meg semmilyen lehetőséget egyáltalán (ebben az esetben, git visszaállítás HEAD
) A parancs is megáll ebben a lépésben.
Ismét megnézzük a táblázatot, és próbálja megérteni, mi történt: nem csak a lemondás az utolsó elkövetni. hanem hozzátéve, hogy az index az összes fájlt. Azt állítja vissza, amíg a parancs végrehajtását git hozzá és git commit.
3. lépés: frissíteni a könyvtár (--hard)
A harmadik dolog, hogy majd visszaállítás - az, hogy a munka könyvtárba ugyanahhoz a fajhoz, mint az index. Ha a --hard. akkor a parancs továbbra is ezt a lépést.
Lássuk, mi történik ma. Törölte az utolsó követ el, az eredményeket a parancs git hozzá és git commit. valamint az összes változást, amit tettek a munkakönyvtárban.
Fontos megjegyezni, hogy az egyetlen jele ez a zászló (--hard) nak vissza veszélyes csapat, az egyik a néhány esetben, amikor Git ténylegesen törli az adatokat. Minden más hívás visszaállítása könnyen visszavonni, de ha meg beállításokat --hard parancs erőszakkal felülírja a fájlokat a munka könyvtárba. Ebben a konkrét esetben a v3 változata a fájl még mindig az elkövetni a Git adatbázisban, és tudjuk, hogy neki vissza, akik a mi reflog. de ha nem követ el ezt a verziót, Git felülírja a fájlt, és lehetetlen lesz visszaállítani.
A reset parancs, meghatározott sorrendben három átírja a Git fa, megállás, amikor azt mondja, hogy:
Mozog az ág, mint azt a HEAD (megáll itt, ha rendelkezésre áll --soft nem kötelező)
Teszi ugyanazt az indexet, mint a fej (megáll ott, hacsak --hard opció meg van adva)
Lehetővé teszi, hogy a munka könyvtár ugyanaz, mint az index.
Visszaállítása az utat
A fő formája a reset parancsot (opciók nélkül és --soft --hard) akkor is át az utat, amellyel fog működni. Ebben az esetben a reset átugorja az első lépés, a többi csak akkor fog működni a megadott fájlt vagy fájlok. Az első lépés kimarad, mivel a HEAD mutatót, és nem hivatkozhat részben egy elkövetni, részben a másik. De Index és az aktuális könyvtárat lehet változtatni részben olyan visszaállítási lépéseket hajt végre a 2. és 3..
Tehát mondjuk futtatja git visszaállítás file.txt. Ez a fajta írás (mert nem adja meg sem a elkövetni SHA-1, vagy fióktelep vagy --soft opciókat vagy --hard) rövidítés git alaphelyzetbe --mixed HEAD file.txt. hogy:
Ez mozgatja az ág, mint azt a HEAD (kimarad)
Teszi az index valamint HEAD (megáll itt)
Ez azt jelenti, sőt, másolatot a fájl file.txt tetőtől az Index.
Ez megteremti a hatása, hogy megszűnt a indexálás fájlt. Ha megnézzük a táblázatot a parancsok és utasító git hozzá. látni fogja, hogy az intézkedések szöges ellentétben.
Ezért a kimeneti git status szerzők arra használja ezt a parancsot, hogy megszünteti az indexelő fájlt. (A részleteket lásd a törlését képzési fájlt.)
Azt könnyen lehet, hogy a Git „nem vette az adatokat HEAD”, jelezve, hogy kötelezzék el, amely, hogy a fájl verzióját. Ahhoz, hogy ezt elérjük, a következőket kell tennie: git alaphelyzetbe eb43bf file.txt.
Feltételezhetjük, hogy valójában mi az üzemi könyvtárban vissza a fájl tartalmát változat v1. teljesült neki git add. majd visszatért a tartalmát változat v3 (sőt, mindezen lépéseket végezzük). Most, ha futunk git commit. A módosítás mentésre kerül, amely visszaküldi a fájlt a változat v1. de a fájl a könyvtárban dolgozó soha nem jön vissza erre a verzióra.
Figyeljük meg, hogy a parancs git add. Reset megadható --patch lehetőség, hogy megszünteti a tartalmának indexelése. Ily módon, akkor szelektíven törölni indexelési vagy visszavonhatja a módosításokat.
Merge véglegesítésekhez
Lássuk, hogyan kell használni a fentivel, a dal - egyesítés követ.
Tegyük fel, hogy van egy elkövetni szekvencia a következő üzenettel: „hoppá.”, „A” és „elfelejtettem a fájlt.” Használhatja a reset ahhoz, hogy gyorsan és könnyen egyesíteni őket egy. (Az Egyesület rögzítése egy másik módja annak, hogy nem ugyanaz a dolog, de ebben a példában, könnyebb használni állítani.)
Tegyük fel, hogy van egy projekt, amelyben az első elkövetni tartalmaz egy fájlt, a második követ el hozzáadja az új fájlt, és megváltoztatja az első és harmadik elkövetni újra megváltoztatja az első fájlt. A második commit-ben készült munkája során, és azt szeretnénk, hogy beolvad a következő.
Akkor végre egy git alaphelyzetbe --soft HEAD
2. HEAD ág, hogy visszatérjen az előző néhány elkövetni (az első követ el, amely szeretné elhagyni):
Ezután egyszerűen futtassa újra a git commit:
Most már láthatja, hogy a „hozzáférhető” történet (a történet, hogy majd elküldi a szerver), most úgy néz ki - már az első vállalják, hogy a file-a.txt változat v1. és a második, amely megváltoztatja a fájl a.txt fájl verzióját v3 és hozzáteszi fájl b.txt. Commit, amely tartalmazta v2 verziója a fájl nem maradt a történelem.
Összehasonlítás a pénztár
Végül, akkor vajon mi a különbség a pénztárnál és visszaállítás. Ahogy állítani. Fizetéskor parancs működik három fa Git, valamint annak viselkedése függ attól, hogy megadta a fájl elérési útvonalát, vagy sem.
elérési út nélkül
A parancs git pénztár [ág] nagyon hasonlít a git visszaállítás --hard [ág]. a folyamat elvégzése mindhárom fák változott néz ki, mint egy [ág]. De van két fontos különbség a két csapat.
Először is, ellentétben alaphelyzetbe --hard. Fizetéskor csapat gondoskodik a munka könyvtár, és ellenőrizze, hogy az ne érjen hozzá a fájlokat, hogy megváltoztak. Tény, hogy ez a csapat megy egy kicsit okosabb - megpróbál rajta egy működő könyvtár egyszerű egyesülést, hogy az összes olyan fájlt, amely nem változtak, frissítve lett. Másrészt, reset --hard csapat csak cserélni az egész dolog, hogy nem végzünk vizsgálatokat.
A másik lényeges különbség, hogy ezek a parancsok frissíti a HEAD. Míg a reset ág mozog, amint azt a fej, fej checkout parancsot mozog magát, úgy, hogy rámutat arra, hogy egy másik ága.
Tegyük fel például, hogy van egy mester ágat, és fejleszteni. amely jelzi a különböző elkövetni, és mi most fejleszteni ág (azaz a fej felé kell). Ha futunk git visszaállítása mester. ő fog dolgozni egy ágat, hogy mindig ugyanarra elkövetni, mint a mester. Ha futunk git checkout mester. hogy dolgozzon nem változik, de a változás HEAD. Ő fog mutatni a mester.
Így mindkét esetben haladunk a HEAD vállalják, hogy az A, de a legfontosabb különbség, hogy hogyan csináljuk. A reset parancs mozog is egy ágat, mutatott a fejére, és aki csak a pénztárnál HEAD.
Mutatja az utat
Egy másik módja, hogy végre a pénztárnál, hogy meghatározza az elérési utat. Ebben az esetben, mivel a reset parancsot. Feje nem mozdult. Ez a parancs, mint a git vissza [ág] file frissíti a fájl verzióját az index egy elkövetni, de ráadásul frissíti és fájlt a munka könyvtárba. Ugyanez lett volna a csapat git alaphelyzetbe --hard [ág] fájlt (ha alaphelyzetbe lehet futtatni úgy) - ez nem biztonságos a munkavégzés könyvtárba, és mozgatja a fejet.
Csakúgy, mint a git reset és git hozzá. Fizetéskor parancsnak --patch lehetőséget annak érdekében, hogy lehetővé teszi, hogy szelektíven visszaállíthatja változtatni a fájl tartalmát.
következtetés
Remélem, megérti a reset parancsot, és akkor is biztonságosan használható. De talán még egy kicsit zavaros, hogy pontosan mit is eltér a pénztárnál. vagy megjegyezni az összes használt szabályok különböző kiviteli hívni.