Adj egy új ágra. Hozzon létre új ágot a kiszolgálón a jelenlegi helyi ágból. Mi a különbség a „git pull” és a „git fetch” között

Jelszó-hitelesítés esetén:

  1. $ git klón https: // felhasználónév: [e-mail védett]/opt/git/repository.git

Munka ágakkal

Az összes ág megjelenítése:
  1. $ git ág
Hozzon létre egy új ágot:
  1. $ git ág
Váltás új ágra:
  1. $ git pénztár
Hozzon létre egy új ágot, és váltson rá:
  1. $ git pénztár -b
Helyi ág törlése:
  1. $ git ág
Ág eltávolítása a távoli lerakatból:
  1. $ git push origin - törölni

Munka vállalásokkal

Hogyan távolíthatom el az utolsó elkötelezettséget?

  1. $ git reset - puha HEAD ^
Git Hogyan. 16. fejezet
Git Hogyan. 17. fejezet A kötelezettségvállalások eltávolítása az ágból
Git hivatalos dokumentáció. Git alapjai - A változások megfordítása

Hogyan változtathatom meg az utolsó elkötelezettséget?

  1. $ git add new_file.txt
  2. $ git sitout --amend

Hogyan változtathatom meg az utolsó elkötelezettség megjegyzését?

  1. $ git sitout --amend
  2. $ git sitout --amend -m "Új megjegyzés"

Hogyan lehet egyesíteni több vállalást?

  1. $ git rebase -i FEJ ~ 3
A FEJ ~ 3 helyett használhatja a kivonat-kivonatot. Meg kell adnia azon kötelezettségvállalás hash-ját, amelyhez mindent össze szeretne egyesíteni (ellapítani).
Megnyílik egy szerkesztő a kötelezettségvállalások listájával, a tetején a legrégebbi kötelezettségvállalással.
  1. pick 1111111 Committe 1 comment
  2. pick 2222222 Elkötelez 2 megjegyzést
  3. pick 3333333 3 kötelezettségvállalás
A válogatást squash-rel kell cserélni, hogy így kapjunk:
  1. pick 1111111 Committe 1 comment
  2. squash 2222222 2 kommentáljon
  3. squash 3333333 3 kommentáljon
Ezután el kell mentenie a fájlt és ki kell lépnie. A szövegszerkesztő ismét megnyílik az összes megjegyzéssel a kötelezettségvállalásokhoz. Szerkesztnie kell, mentenie kell és kilépnie kell. Ezen lépések után a kötelezettségvállalások egyesülnek.

Hogyan visszavonhatom egy adott fájlban végrehajtott változtatásokat, és visszaállíthatom az állapotát, amelyben az utolsó elkötelezettség után volt?

  1. $ git fizetés - file.txt

Hogyan állíthatom vissza az összes el nem kötelezett (el nem kötelezett) változást?

  1. $ git pénztár

Hogyan tárolhatok néhány fájlt a következő elkötelezettséghez?

Tegyük fel, hogy változtatásokat szeretne végrehajtani egyes fájlokban, és más fájlokban végrehajtja a változtatásokat a következő kiadásban. Ezután ideiglenesen eltávolíthatja őket a lerakatból (nem fájlok), majd újból hozzáadhatja őket.
  1. $ git reset HEAD file.txt
Ez a parancs eltávolítja a fájlt a lerakatból, a régi végrehajtásokban marad. A feje az aktuális ág utolsó kötelezettségvállalására mutat.

Ha nem tud megnyomni a távoli lerakatot, mert a lerakat jelenlegi verziója alacsonyabb, mint a távoli lerakatban

Ebben az esetben kényszerítheti a nyomást.
  1. $ git push -f eredetű mester

Ágak egyesítése

Hogyan tudok csak néhány fájlt átvenni egy másik ágból?

  1. $ git checkout fióknév - elérési út / a / file.file

Távoli tárolók

Információk megjelenítése a távoli lerakatról

  1. $ git távoli show eredete
Valami ilyet jelenít meg:
  1. * távoli származás
  2. URL letöltése: [e-mail védett]: /opt/git/test-project.git
  3. Push URL: [e-mail védett]: /opt/git/test-project.git
  4. HEAD ág: mester
  5. Távoli ág:
  6. új mester (a következő letöltés a távvezérlőkben / származásban tárolódik)
  7. Helyi ref konfigurálva a "git push" számára:
  8. a mester tolja a mestert (helyi elavult)

Távoli lerakat hozzáadása

  1. $ git távoli származási hely hozzáadása [e-mail védett]: /opt/git/test-project.git

Távoli ágak - ezek linkek a távoli lerakatok fióktelepeihez... Ezek helyi fióktelepek és nem mozgathatók; automatikusan mozognak, amikor a hálózaton keresztül kommunikálnak. A távoli ágak könyvjelzőkként emlékeztetnek arra, hogy a távoli leraktárak fiókjai mikor utoljára kapcsolódtak hozzájuk.

Ebben az esetben például egy összetett összefonódás esetén folytatható a peres eljárás, és meg lehet őrizni az összes összefonódással kapcsolatos meglévő kísérletet. Tegyük fel, hogy Marco azt sugallja Gianninak, hogy a 2. kísérlet a legmegfelelőbb, de egy kis változtatásra van szükség.

Nyomja meg az elkötelezettséget az átírt történelemmel

Így alakul a helyzet. Ezen a ponton van egy harmadik egyesítési kötelezettségvállalásunk, amely a Gianni2 kísérletének eredménye, amelyhez Marco hozzátette a javításokat. Ezen a ponton megtisztíthatja.


Ezen a ponton Gianni megpróbálhat egy tolást, amely akkor lesz sikeres, ha ugyanakkor senki más nem tolja tovább a törzsváltást.

Úgy néz ki, mint (távoli repónév) / (ága). Például, ha azt szeretné látni, hogy a kiindulási kiszolgálón lévő fő ág hogyan nézett ki legutóbb, amikor csatlakoztattál hozzá, nézd meg az eredeti / fő ágot. Ha Ön és egy partner ugyanazon a problémán dolgoznak, és feltöltötték az iss53 fiókot, akkor lehet, hogy saját helyi iss53 fiókja van; de a kiszolgálón ez az ág az eredete / iss53 aláírására mutat.

Ezen a ponton, ha megpróbál kattintásra, hibaüzenetet fog kapni. Gianni valójában most olyan helyzetet teremtett, amelyben a változás tökéletes eredménye ellentétes a módosítás iránti elkötelezettségével. Ennek a szabálynak a következménye van, amely - különösen az összetett egyesülések után - azt sugallja, hogy hajtják végre nagyszámú tesztek és ellenőrzések, hogy megbizonyosodjon arról, hogy az egyesülés megfelelő-e mielőtt megnyomná. Miután a nyomás valóban megtörtént, az egyesítés megváltoztatása triviális művelet lesz.

Az elosztott rendszerben az ágak kezelése radikálisan különbözik a központosított rendszerektől, ahol az ágak nem más, mint a verzióvezérlő mappa „intelligens másolata”. Fogalmi szempontból egy ág egy "kód karakterlánc", amelyet függetlenül lehet fejleszteni és szinkronizálni más kódszövegekkel egyesítési műveletek révén. Éppen ellenkezőleg, az elosztottban ez a szükség teljesen hiányzik, mivel a "kód sor" fogalma rejlik az elosztott tároló struktúrájában. A beépülési folyamat meghatározza, hogy mely változtatásokat kell beépíteni a következő elkötelezettségbe, és arra használják, hogy "új fájlokat adjunk hozzá" vagy "a tárolóban már lévő, de megváltozott fájlokat adjunk hozzá".

Mindez valószínűleg zavaró, tehát nézzünk meg egy példát. Létrehoztam egy távoli lerakatot a GitHubon https://github.com/n0tb0dy/RemoreBranches

Ott három kötelezettségvállalást tettem


Távoli lerakat klónozásakor a Git automatikusan megnevezi eredet, az összes adatot onnan veszi, létrehoz egy mutatót arra, amit az ág mutat fő-, és helyileg fogja elnevezni származás / mester (de nem mozgathatja). Git saját fiókjává fog tenni téged is fő-amely ugyanabban a helyen kezdődik, mint az ág fő- ban ben eredettehát van valami mûködni.

Gyakorlatilag az összes hozzáadott fájl hozzáadódik egy speciális területhez, úgynevezett átmeneti területhez, amely tartalmazza a következő végrehajtásba beépítendő módosításokat. Az előző műveletek végén megjelenik a mintátároló, amint az az alábbi ábrán látható, amely megmutatja a különbséget egy központi rendszerrel szemben.

A helyi adattárak megléte azt jelenti, hogy két különálló fejlesztő hozott létre helyi jutalékokat ugyanaztól az atyától, és ezért lényegében két különböző kódsorral rendelkezik: az egyik a fejlesztők számára, vagy mindkettő a helyi fiókjában működött.

Az "Origin" nem külön név

Ez hasonló a központi ág alapértelmezett nevéhez egy helyi lerakat létrehozásakor. Csakúgy, mint egy ág fő- alapértelmezés szerint létrehozva a parancson git init, csakúgy, mint az alapértelmezett név eredet parancsra git klón... Ha git-klónt bocsát ki - booyah, akkor booyah / master lesz az alapértelmezett távoli ág.

Ez a helyzet haszontalan, és csak akkor van értelme, ha a tároló tartalmát korábban szeretné megtekinteni, ám nem javasoljuk, hogy munkához használja, és egyéb változtatásokat végezzen. Ezért a mutatóról beszélve egy egyszerű változó, amely egy konkrét elkötelezettségre mutat, és általában ágra utal. Valójában az ág nem egy mappa "intelligens másolata", hanem egyszerűen egy mutató, amely egy adott megbízásra mutat, és lehetővé teszi a pillanatfelvételt ebből a végrehajtásból.

Ebben az esetben két különálló sorot kell tárolnia helyileg: a mester és az egyik, ahol a hiba kijavításra kerül. Centralizált módban ez a lehetőség nem érhető el, az egyetlen analógia az, hogy létrehoz egy fiókot a kiszolgálón, de az egész csapat számára látható lesz. Ezen a ponton csak adja meg az ág nevét.

És hát vissza a ... elkötelezettségünkhöz. A távoli tárolóban így néznek ki

Parancs git letölteni csak olyan frissítéseket kap a kiszolgálótól, amelyek még nem álltak rendelkezésre, és semmilyen módon nem változtatja meg a működő könyvtárat... Ez a parancs csak megkapja az adatokat, és lehetővé teszi, hogy eldöntse, mit kezd vele (kombinálja az adatokkal, szerkesztheti stb.)

Ebben az esetben egyértelmű, hogy az újonnan létrehozott ág csak helyi, tehát nem származási helyre teszik közzé. Részletesebb magyarázat a Kötelezettség lapon található. Ez a létrehozott ágot csak a helyi lerakatban hozza létre, és senkit sem fog látni. Most két helyi fiókkal, majd két mutatóval ez az, ahogyan a helyi adattár megjelenik a helyi ágon tett két kötelezettségvállalás és a mester kötelezettségvállalása után.

Az előző ábra bemutatja, hogyan lehet egyesíteni egy ágot, amelynek jelentős hibája van javítva. Miután minden konfliktus megoldódott, új kötelezettségvállalást kell vállalnia azok megoldásával. Mint láthatja, az eredmény hasonló a konfliktus megoldásához, amelyet két fejlesztő okozott, akik ugyanazt a fájlt cserélték a saját fájljukban helyi raktár, a koncepció hasonló. Az előző esetben konfliktus merült fel a helyi és a távoli master között, ebben az esetben konfliktus merül fel a két helyi fiók között.

Parancs git pull , A legtöbb esetben, azonnal összevonja a kapott adatokat az Ön webhelyével.

Általában a legjobb, ha csak a git fetch parancsot és a git merge parancsot használja, hogy saját kezűleg vezérelje az egyesítést.

Távoli ágak eltávolítása

Természetesen ez azt jelenti, hogy távoli kiszolgálón el kell távolítani az ágakat.

A helyi fióktelepek közötti konfliktusok megoldása után további varázslatok léphetnek fel a varázsló felett, amelyeket más fejlesztők okozhatnak, akik ugyanazokat a fájlokat módosították, mint az alábbi képen. Az eredmény az alábbiakban látható. Ebben az esetben két helyi fiókunk van és egy távoli, minden egyesítés megtörténik, majd továbbjuthatunk a központi adattárba.

Helyi ághatások más fejlesztők számára

Gyakran a hibajavításhoz vagy a kísérletezéshez használt helyi ágaknak nincs értelme létezni az egyesítés után, és eltávolításukra kerülnek. A törlés művelet egyszerűen törli a mutatót, de minden kötelezettségvállalás mindig megmarad. Érdekes szempont az, hogy megértsük, mit látnak más fejlesztők, amikor vonzzák és vonzzák a fejlesztői változtatásokat, amelyek a helyi egyesülést eredményezték. Tehát lássuk, mi történik a csapat másik fejlesztőjével.

$ git push origin - törölje a szerverjavítást


Taps! És a távoli kiszolgálón nincs elágazás. De alapvetõen ez a parancs csak törli az ágmutatót a távoli szerveren. A Git-kiszolgáló addig tárolja az összes kötelezettségvállalási információt, amíg a szemétgyűjtési parancsot nem futtatja.

Íme, amit egy másik fejlesztő lát. Ez a helyzet gyakran azt eredményezi, hogy az emberek nem használják a helyi fióktelepeket, hogy elkerüljék a központi adattár bonyolítását, de ez az eszköz számos előnyeit megfosztja. Tegyük fel, hogy egy második fejlesztő panaszkodik a tárházban található zavar miatt, mert az első fejlesztő által létrehozott helyi fióktelep a lerakat szerkezetét bonyolultabbá tette. Ha az összes fejlesztő helyi fióktelepeket használ, akkor a központi adattár kezelhetetlenné válhat.

A helyzet hasonló az előző helyzethez. Mivel az összes hatás összehasonlítható a mappát tartalmazó pillanatfelvétel eszközzel, amely minden egyes végrehajtáskor elmenti a különbséget az előző állapothoz képest, mindezek az információk felhasználhatók a differenciális változások újbóli alkalmazására a különböző atyák esetében. A javítással korlátozott helyi fióktelepekben gyakran nem fordulnak elő konfliktusok, és a művelet ezután sikeres.