Időutazói útmutató a Githez

Szerző: Randy Alexander
A Teremtés Dátuma: 28 Április 2021
Frissítés Dátuma: 16 Lehet 2024
Anonim
Időutazói útmutató a Githez - Kreatív
Időutazói útmutató a Githez - Kreatív

Tartalom

Míg a tudósok lerombolták az időben való visszautazás álmát, Git irányítást kínál a negyedik dimenzió felett, amikor a múlt hibáit ki kell javítani. Az elosztott verzióvezérlő rendszer lehetővé teszi az elkötelezettségek módosítását, elvetését, átrendezését és módosítását a lerakat előzményeinek súrolásához.

De vegye figyelembe egy tapasztalt időutazó figyelmeztetéseit. Git betartja az okság törvényét; a Git-adattár minden elkötelezettsége elválaszthatatlanul kapcsolódik az azt megelőző elkötelezettséghez. Egy elkötelezettség megváltoztatása megváltoztatja az összes utána következő elkötelezettséget, alternatív valóságot teremtve. A múlt megváltoztatása veszélyes lehet, és - ritka eseteket leszámítva - csak akkor szabad megtenni, ha a megváltoztatott eseményeket más nem vette észre. Azokat az ágakat, amelyeket már távirányítóra toltak, nem szabad megváltoztatni.

Csatlakozzon hozzám, amikor felfedezzük a történelem Git segítségével történő átírásának módjait.

01. A közelmúlt történetének módosítása

Bármi okból is, az emberi agy úgy tűnik bekötött, hogy emlékezzen valami fontosra, csak miután megnyomta a „Küldés” gombot egy e-mailen, és a megfelelő szavak mindig eszembe jutnak, miután egy beszélgetés véget ért. Hasonlóképpen, gyakran rájövök, hogy azonnal hibáztam, miután elköteleztem magam Gitben. A Git történelem átírásának legbiztonságosabb és leggyakoribb formája a legújabb kötelezettségvállalás módosítása.


Ez a cikk egy Git-adattárban készült. Az első elkötelezettség egy README létrehozása volt, amely elmagyarázza a tárház célját.

$ git add.
$ git kötelezettség -am ’README hozzáadása’
[master (root-commitation) 6261ead] Add README
2 fájl megváltozott, 12 beszúrás (+)
létrehozási mód 100644 README.md
létrehozási mód 100644 cikk.md

Hoppá, miután elköteleztem magam, rájöttem, hogy elkövettem magam cikk.md, amely csak néhány megjegyzés és a bevezető első néhány mondata volt. Még nem szándékoztam ezt a fájlt lekötni, ezért távolítsuk el az előzményekből.

$ git rm - gyorsítótárazott cikk.md
rm ’article.md’

A - gyorsítótárban érv arra git rm azt mondja Gitnek, hogy állítsa be a fájl eltávolítását, de valójában ne törölje a fájlt a fájlrendszerből. Ha törölni szeretné a fájlt, egyszerűen hagyja ki ezt az érvet.

Más módosításokat is végezhetünk, mint például akkor, ha újabb elkötelezettséget szeretnénk létrehozni, például szerkeszteni a README.md és azzal színpadra állítja őket git add. Módosítsa az előző kötelezettségvállalást a --módosít zászló to git elkövetni:


$ git elkövetni - módosítani
[master 667f8c9] Add README
1 fájl megváltozott, 7 beillesztés (+)
létrehozási mód 100644 README.md

A Git megnyit egy szerkesztőt, amely lehetővé teszi az előző lekérdezési üzenet szerkesztését. A Git napló most megmutatja, hogy még mindig csak egy kötelezettség van, és ez a kötelezettség csak README.md.

$ git log --oneline --stat
667f8c9 Add README
README.md | 7 +++++++
1 fájl megváltozott, 7 beillesztés (+)

Vállaljuk ezt a cikket most, hogy előrelépés történt.

$ git cikk hozzáadása.md $ git kötelezettség -m ’módosítási szakasz első vázlata’ [master 8dbf5d5] az első módosítás-tervezet 1. szakasz fájl megváltozott, 47 beillesztés (+) létrehozási mód 100644 cikk.md

02. A közelmúlt történetének visszavonása

Néha az elkötelezettségnek annyi hibája van, hogy könnyebb egyszerűen visszavonni. Lehet, hogy rossz ágra lett elkötelezve, vagy véletlenül került hozzá egy nem kívánt fájl könyvtár.

$ git reset HEAD ^

Ez arra utasítja Git, hogy távolítsa el az előző elkötelezettséget, de az általa bevezetett változásokat tartsa meg helyben. git reset erőteljes és nem megfelelő használat esetén romboló hatású lehet. Érdemes erről többet olvasni a git-scm.com oldalon.


A naplóból most kiderül, hogy a legújabb elkötelezettség eltűnt, de cikk.md még mindig módosul.

$ git log - online
667f8c9 Add README

$ git állapot -s
M cikk.md

Innentől kezdve a változásokat el lehet végezni egy másik ágon, elrejtve, eldobva vagy módosítva és újra elfogadva.

03. Tartson rendezett történelmet

Ha egy csapattal használta a Git-et, akkor kétségtelen, hogy látta, hogy egy lökést elutasítottak.

$ git push origó mester
A [email protected] címre: bkeepers / git-history.git
! [elutasítva] master -> master (nem gyors előre)
hiba: nem sikerült feltölteni néhány hivatkozást a ’[email protected] címre: bkeepers / git-history.git’
tipp: A frissítéseket elutasítottuk, mert a jelenlegi fiókjának csúcsa mögött van
tipp: távoli megfelelője. A távoli változtatások egyesítése (pl. „Git pull”)
tipp: mielőtt újból lök.
tipp: A részletekért lásd a „git push --help” ’Megjegyzés a gyors előretekintéshez’ című részt.

Bár ez az üzenet nagynak és ijesztőnek tűnik, valójában nagyon hasznos. A tippek azt mondják, hogy amióta elkezdtük a munkánkat, egyik csapatunk tagjai változtatásokat hajtottak végre, és meg kell szereznünk őket, általában futással git húzás. A tipp azt is javasolja, hogy nézze meg a „gyors előre” jegyzetet a Git dokumentációjában. Én támogatom ezt az ajánlást.

Futás git húzás beolvassa a távoli módosításokat, és létrehoz egy új elkötelezettséget, amely egyesíti őket a helyi változásainkkal. Noha nincs semmi baj az egyesítési kötelezettségvállalással, felesleges bonyolultságot ad a verziótörténetnek.

$ git log --dekorálás --graph --oneline
* aaf6c0c (HEAD, master) Merge ág ’master’ származásának egyesítése
|
| * 9f7e4de A README frissítése
* | 00165a8 a módosítási szakasz első tervezete
|/
* 667f8c9 (origó / visszaállítás) Add README

Ami történelmünket világosabbá és olvashatóbbá tenné, az egy módja annak, hogy átvegyük a változásainkat és alkalmazzuk őket a távoli változásokra, így:

$ git pull --rebase eredetű mester
Először tekerje vissza a fejét, hogy visszajátssza a munkáját a tetején ...
Jelentkezés: frissítse a README fájlt

Ez a verziótörténetet úgy jeleníti meg, mintha a változtatást azután tették volna, hogy egy csapattag elkötelezte magát.

$ git log --dekorálás --graph --oneline
* 8dbf5d5 a módosítás első szakaszának tervezete
* c408281 frissítse a README fájlt
* 667f8c9 Add README

Láthatja, hogy a Git előzményeink sokkal tisztábbak és könnyebben beolvashatók.

Hacsak a tárházat nem tolják több távirányítóra, szinte mindig jó ötlet az újrabázolás húzáskor. A Git-et úgy állítottam be, hogy automatikusan újrabázisozzon.

$ git config --global branch.autosetuprebase mindig

A felülvizsgálati előzmények rendben tartása felületesnek tűnhet, de óriási segítséget nyújt egy nagy projekt irányításakor.

04. Tisztítsa meg a közelmúlt történetét

Néha csak néhány rossz lépés után derül ki, hogy van-e jobb út. A Git rugalmassága megkönnyíti az ellenőrzőpontok létrehozását az út során, és pontot kínál a visszatéréshez, ha a dolgok rosszra fordulnak.

Mindennapi fejlődésem során a lehető leggyakrabban vállalom el. Bármikor azt gondolom magamban, hogy "rendben van, ez megtörtént, most mi van?", Vállalom. Míg ez olyan revíziótörténethez vezet, amely pontosan tükrözi az események sorrendjét, sok apró elkövetés zaja valóban gátolhatja a nagy projektek fenntarthatóságát. Tehát ha készen állok megosztani a változtatásokat a csapatommal, áttekintem a közzé nem tett kötelezettségvállalásaimat és megtisztítom őket.

Az interaktív újraindítás lehetővé teszi az elkötelezettségek szerkesztését, összegyűjtését vagy teljes eltávolítását a fióktelep közelmúltjából.

A cikk előrehaladásának áttekintése során felfedeztem néhány kínos elírást. Mivel az adattárat még senkivel nem osztották meg, az eredeti kötelezettségváltás hibáinak javításával lefedtem a számokat. Megőriztem eredeti hibámat, így nyomon követheti, ha megnézi az adattár elgépelési ágát.

Először két új vállalást hoztam létre az elírási hibák kijavítására.

$ git log - online
7445019 Javítsa ki a módosítás helyesírási hibáját
b0377f9 Javítsa a gépelési hibát a címben
b1cdd72 - pullase első húzása
A 2fbe35b első piszkozata
7bb9109 a módosítási szakasz első tervezete
667f8c9 Add README

Vegye tudomásul az elkötelezettséget, amelyet rögzíteni kell. Mindkét elírási hiba elkövetésből származott 7bb9109, a módosítási szakasz első tervezete. Indítsa el az újrabázist a felülvizsgálat előtt:

$ git rebase -i 7bb9109 ^

A Git megnyitja a szerkesztőt a feladatok listájával és egy nagyon hasznos üzenettel.

pick 7bb9109 első módosítási szakasz tervezete
válassza a 2fbe35b első piszkozatát
pick b1cdd72 a pullrebreb első vázlata
pick b0377f9 Javítsa ki a gépelési hibát a címben
pick 7445019 Javítsa ki a helyesírási hibát

# Újraalapozza a 667f8c9..7445019 elemet erre: 667f8c9
#
# Parancsok:
# p, pick = felhasználás végrehajtása
# r, reword = használd az elköteleződést, de szerkeszd az elköteleződés üzenetét
# e, edit = use activ, de állítsa le a módosítást
# s, squash = felhasználás elkötelezettség, de beleolvadt a korábbi elkötelezettségbe
# f, fixup = mint a "tök", de dobja el az elkötelezett naplóüzenetét
# x, exec = run parancs (a sor többi része) shell használatával
#
# Ezek a sorok újrarendezhetők; fentről lefelé hajtják végre.
#
# Ha itt eltávolít egy sort, akkor a KÖTELEZETTSÉG VESZT.
#
# Ha azonban mindent eltávolít, akkor az újrabázis törlődik.
#
# Ne feledje, hogy az üres elkötelezettségeket megjegyzik

Amint a jegyzet kifejti, a kötelezettségvállalások átrendezhetők a sorrend megváltoztatásához, ill szed megváltoztatható a többi parancs egyikére.

pick 7bb9109 első módosítási szakasz tervezete
fixup b0377f9 Javítsa ki a gépelési hibát a címben
fixup 7445019 Javítás a helyesírás elírása
válassza a 2fbe35b első piszkozatát
pick b1cdd72 a pullrebreb első vázlata

A két elírási hibát közvetlenül az elkövetés után helyeztem át, ahol bevezették és megváltoztatták a választási lehetőséget elhelyez hogy beolvassa őket az eredeti elkötelezettségbe. A szerkesztő mentése és bezárása után a Git alkalmazza a módosításokat:

[leválasztott HEAD 00165a8] a módosítás szakasz első tervezete
1 fájl megváltozott, 47 beszúrás (+)
létrehozási mód 100644 cikk.md
Sikeresen újrabázolt és frissített refs / heads / master.

A napló azt mutatja, hogy az elírási hibák kijavítása már eltűnt. A javításokat az eredeti elkövetésekre alkalmazták, és nincs bizonyíték a gyenge helyesírásomra (ebben az ágban).

$ git log - online
4787614 a pullreb első vázlata --rebase
ee719e9 a visszaállítás első vázlata
00165a8 a módosítási szakasz első tervezete
667f8c9 Add README

Ez az újbázis minden egyéb interakció nélkül működött, de néha az újraindítás kézi javításokat igényel az összeolvadási konfliktusok esetén. Ha ez megtörténik, ne őrjöngjön. Egyszerűen olvassa el az üzeneteket. A Git általában segít megszabadulni a kötéstől.

05. Írja át az egész történelmet

Az összes eddig megvizsgált Git parancs hasznos a legutóbbi elkötelezettségek módosításához, de néha szélsőségesebb intézkedésekre van szükség, legyen szó érzékeny vagy rendkívül nagy fájlok eltávolításáról, vagy egyszerűen a projekt könnyebb kezeléséről.

git szűrőág támogatja az egyéni szűrőkkel teli kezet, amelyek átírhatják a változások előzményeit egy sor végrehajtáshoz.

Az első jogszerű használatom git szűrőág egy nagy projekten volt, ahol a szerver és az ügyfél is ugyanabban az adattárban voltak. Ahogy egyre többen kerültek be a csapatba, és nőtt a feszültség a hipszterek és a nyakszakáll között, nyilvánvalóvá vált, hogy két tárhely lenne megfelelőbb.

Egyszerű megoldás az lett volna, hogy kétszer klónozták meg az adattárat, törölték a felesleges fájlokat, és a többi fájlt áthelyezték. De ez két adattárat tartalmaz, amelyek története megismétlődik, és felesleges helyet foglalnak el. Ehelyett kétszer klónoztuk az adattárat, és használtuk a --subdirectory-filter két új adattár létrehozása, amelyek csak az alkalmazás releváns részein tartalmazzák a változásokat.

$ git rebase -i 7bb9109 ^

Sokan különböző e-mail címeket használnak személyes és munkahelyi projektekhez, ami könnyen eredményezheti, hogy nem megfelelő e-mail címet használnak egy adattárhoz. A --env-szűrő módosíthatja a kötelezettségvállalás alapvető metaadatait, például a szerzői információkat vagy az elkötelezettség dátumát.

$ git filter-branch --env-filter ’
ha [$ GIT_AUTHOR_EMAIL = szemé[email protected]];
akkor [email protected];
fi; exportálás GIT_AUTHOR_EMAIL ’
Írja át az f853027b7979756bab7146d3bb34d8829b81a884 (8/8)
Ref ’refs / heads / master’ átírásra került

Tegyük fel, hogy egy projekt elején valaki rendkívül nagy eszközöket vállalt el, és most mindenkinek, aki klónozza a tárat, meg kell várnia az eszközök letöltését. Vagy esetleg nyílt forráskódú projektet készít, amelyben érzékeny adatok vannak tárolva.

$ git filter-branch --index-filter ’git rm -r --cached --ignore-unmatch docs / designs’
- aszalt szilva - címke név szűrő macska - - minden

A következő módosítások mindegyike átírja a lerakat teljes történetét, lényegében új tárolóvá téve azt. Az eredetileg használt távirányítóra történő elutasítás elutasításra kerül.

$ git push
! [elutasítva] master -> master (nem gyors előre)

Kényszerítheti Git-t, hogy minden változtatást meglévő távvezérlőre tegyen, de ne feledje, hogy ez hátrányos hatással lehet a projekten dolgozó mindenki másra.

$ git push --force --all --tagek

06. Erő és rugalmasság

A Git erőteljes tulajdonságai, rendkívüli rugalmassága és gyakran nem intuitív parancssora elsöprőnek tűnhet, de a tanuláshoz és a kísérletezéshez idő kell, hogy megtérüljön. Ha kétségei vannak, adja át --Segítség bármely Git parancsra, hogy többet tudjon meg. Ha megérted, hogy miként és mikor kell átírni a verziótörténetet, teljes ellenőrzést kapsz a projektek felett, és könnyebben kezelheted őket.

A képet JohnGoode jóvoltából használta a Creative Commons licencelés alatt

A Brandon Keepers a GitHub dolgainak készítője és megszakítója, elsősorban a Speaker Decken dolgozik. Ha az arcát nem világítja meg gyengén a számítógép képernyője, megtalálhatja őt egy könyvvel a kezében, teniszütőt vagy kosárlabdát játszik, kutyájával fut, vagy jó ételeket és italokat élvezhet a feleségével.

Tetszett ez? Olvassa el ezeket!

  • Hogyan készítsünk egy alkalmazást: próbálja ki ezeket a nagyszerű oktatóanyagokat
  • Ingyenes grafikai tervező szoftver áll rendelkezésére most!
  • Zseniális Wordpress oktatóprogram-választás
Tanácsunk
Olyan előugró bolt, amilyet még soha nem látott
Felfedez

Olyan előugró bolt, amilyet még soha nem látott

Itt, a Creative Bloq-ban c odálkoztunk a híre épületeken, hogy meglá uk, mielőtt meghalunk - bebizonyítva, hogy az építé zet ott az egyik legimpozán a...
A Game of Thrones házak vállalati logóként vannak ábrázolva
Felfedez

A Game of Thrones házak vállalati logóként vannak ábrázolva

Azóta hihetetlenül nagy eli meré jár a Trónok játékának azóta, hogy 2011-ben megjelent a képernyőnk. A Trónok játékának karakterei...
15 API-t kell tudniuk a fejlesztőknek
Felfedez

15 API-t kell tudniuk a fejlesztőknek

Új fejle ztői e zközöket adnak ki naponta, é időnként való zínűleg azon kapja magát, hogy vála ztani zeretne valódi munkája é új techno...