Melyek a leggyakoribb Git hibák és hogyan lehet ezeket kijavítani?



Visszavonhatja a leggyakoribb hibákat, miközben a git verziószolgáltató rendszerben verziót készít, és védi az adatok integritását.

A gémmel technológiát, elkerülhetetlenné válik az informatikai szakemberek számára, hogy egyszerre több adatot dolgozzanak fel, és az adatok folyamatosan fejlődnek az idővel. Fontos továbbá nyomon követni az adatok minden változását, és fel kell készülni arra, hogy szükség esetén visszavonja vagy visszavonja a nem kívánt változásokat.

Be kell vallanom, hogy az adataim Gitben történő változatai lehetővé teszik számomra, hogy kísérletezőbb legyek a projekt fejlesztésében. Ha elrontom, tudom, hogy a git-nek mindig módja van visszavonni és / vagy visszaállítani a projektem ezt a verzióját a korábbi csavarozás előtti állapotra. Minden egyes A réteg célja, hogy lehetővé tegye az adatváltozások áttekintését és módosítását és / vagy javítását, mielőtt az adatokat a következő szakaszban áthelyezné. Tehát a következő hibákkal foglalkozik ez a blog:





Fájlok / könyvtárak visszavonása az Indexből

socket programozás java példában

A fájlok hozzáadása és / vagy módosítása során gyakran használja a „git add” parancs alapértelmezett viselkedését, vagyis az összes fájlt és könyvtárat hozzáadja az Indexhez.Sokszor úgy érzi, hogy bizonyos fájlokat vissza kell állítani vagy módosítani kell őket utoljára, mielőtt elkötelezné őket.



Szintaxis: git reset


fájlok eltávolítása az Indexből - gyakori git hibák -Edureka

Az Index területének állomás nélküli visszavonása újabb esélyt kínál arra, hogy újra feldolgozza az adatait, mielőtt elkötelezi magát egy helyi repo mellett.



Szerkessze az utoljára elküldött üzenetet

Parancs: git elkövetni - javítani
Szerkesztheti a legújabb véglegesítési üzenetet anélkül, hogy újat hozna létre. A végrehajtási naplók felsorolásához álnevet állítottam be:
Parancs: git config - globális alias.hist 'log - szép = formátum: '% C (sárga)% h% Creset% ad | % C (zöld)% s% Creset% C (piros)% d% Creset% C (kék) [% an] '--graph --dekoráció --dátum = rövid'x


Ne módosítsa a távoli adattárba már átküldött és másokkal megosztott véglegesítési üzenetet, mivel ez érvénytelenítené a korábbi elköteleződési előzményeket, és így az ezen alapuló munkát érintheti.

Elfelejtett néhány változtatást az utolsó kötelezettségvállalásban

Tegyük fel, hogy elfelejtett néhány módosítást végrehajtani, és már elkészítette a pillanatképet, és nem is akar újabb kötelezettséget vállalni a hiba kiemelésére.
Parancs: git elkövetni - javítani


Kiemeltem, hogy a közelmúltban elkötelezett objektum sha-1 azonosítója hogyan került újra létrehozásra és megváltoztatásra. Úgy tettem, mintha egyetlen elkötelezettséget vállaltam volna, összekeverve a változásokat.

Dobja el a helyi változásokat

Tehát, itt van egy olyan eset, amikor módosítottam a „README” fájlt és megrendeztem. Ezután másodszor módosítottam ugyanazt a fájlt, de rájöttem, hogy nem akarom a második változtatást.

Most engedje meg, hogy ne vonjam vissza a teljes módosítást, egyszerűen meg tudom húzni a fájl szakaszos verzióját.
Szintaxis:
git pénztár -–Helyi változások egy fájlban
git pénztár -–Helyi változások a könyvtár összes fájljában & félénk és félénk

Parancs: git checkout - README

Tehát elvetettem a fájl utolsó módosításait, és elfogadtam a fájl fokozatos verzióját. A következő elkötelezettségnél csak a fájl lépcsőzetes verziója kerül a helyi adattárba.

A személyes adatokat átadta a helyi adattárnak

Bizonyos adatokat el akarok távolítani a helyi adattárból, de a fájlokat a munkakönyvtárban tartom.
Szintaxis:
git reset - kevert HEAD ~
git reset - kevert

Parancs: git reset - kevert HEAD ~ 1
A HEAD ~ 1 az aktuális HEAD ág által közölt legutóbbi elkötelezettség előtt közvetlenül végrehajtott műveletet jelzi.

Az aktuális pillanatkép fájljai eltávolításra kerültek mind a helyi adattárból, mind az átmeneti területről. Adja hozzá a következő mintákat a globális .gitignore fájlba, hogy kizárja őket a git nyomon követéséből.
vim ~ / .gitignore_global
# jelszó fájlok #
* .pass
*.kulcs
* .passwd

Ezzel eltávolítja a jelszófájlok pillanatképét tartalmazó elkötelezettséget, és tiszta színteret kap. A fájljaim továbbra is megtalálhatók a munkakönyvtáramban, de már nincsenek a helyi adattárban, és nem is kerülnek távoli adattárra.

Vigyázat: Ha elveszíti őket, a git nem tudja helyreállítani az Ön számára, mivel nem tud róla.

Cserélje le a legújabb kötelezettségvállalást egy új kötelezettségvállalásra

Szintaxis: git reset --soft [/ HEAD ~ n>]

A „–soft” opció csak eltávolítja a lekötött fájlokat a helyi adattárból, miközben azok még az Indexben vannak szakaszolva, és felülvizsgálat után újra elkötelezheti őket. a pillanatkép sha-1-je, amelyet el akar távolítani a helyi repóból. ahol n a HEAD elkötelezettsége előtti végrehajtások száma

Parancs :git reset - soft HEAD ~ 1


Módosítsa a fájlokat és állítsa őket újra

Parancs: git pühend -m 'index.html és style.css hozzáadása'
Elkötelezettségének története most kiderül:

Helytelen adatokat adott el

Szintaxis:
git reset --kemény HEAD ~ n–Állítsa vissza a projektet úgy, hogy az „n” elkötelezze magát a legutóbbi elkötelezett pillanat előtt
git reset - kemény–Állítsa vissza a projektet egy adott kötelezettségazonosító pillanatképre

Parancs: git reset - kemény HEAD ~ 1


A legfrissebb elkötelezettség és a sérült fájlok eltávolításra kerülnek a helyi adattárból, az átmeneti területről és a munkakönyvtárból.

Vigyázat: Veszélyes parancs, mivel a fájlok elvesznek a munkakönyvtárban. Nem ajánlott távolról megosztott tárhelyen.

Térjen vissza a régi projekt állapotomba

Áttekintheti a projekt egy régebbi állapotát az idők történetében. Ha elrontja a legújabb verziót, vagy javításokra van szüksége a régebbi kódban, akkor érdemes létrehoznia egy másik ágat a régi projekt pillanatképéből, hogy ne akadályozza a jelenlegi munkáját. Lássuk, hogyan:
a. Sorolja fel a projekt előzményeit, és döntsön a régebbi elkötelező azonosító, parancs mellett:menj hist
b. Hozzon létre egy másik ágat az elkötelezettség azonosítójából:git checkout -b régi állapotú e7aa9a5
c. Folytassa a kód kidolgozását, majd később egyesítse / újrabázolja a „master” ággal.

Helyezze vissza a törölt helyi fiókot

Regenerálni lehet az elveszett munkát egy referencia ágon. Mondjuk, töröltem az „old_code” elágazást anélkül, hogy összeolvadtam volna a fő ággal, és elvesztettem a munkát. És nem, én sem a távoli adattárhoz nyomtam az ágat, akkor mi lesz? Nézze meg az enyémeket, és tartsa naplóba az összes hivatkozáson végrehajtott összes változtatást.megy reflog

Tehát a HEAD @ {2} a mutató, amikor az „old_code” ágra költöztem, állítsuk vissza:

Szintaxis:git pénztár -b
Parancs:git checkout -b old_code HEAD @ {2}

A létrehozásakor most a „régi_kód” ágban kell lennie a legújabb munkával. Ezenkívül a „reflog” mutató a HEAD @ {1} címen volt a legutóbbi elkötelezettség az „old_code” ágon. elkötelezett, csak futtassa a parancsot:git reset - kemény HEAD @ {1}.Ez visszaállítja a módosított fájlokat a munkakönyvtárban is.

Ha részletesen szeretné tudni, hogyan működik ez a parancs, és hogyan tudja kezelni a „reflog” bejegyzéseket, akkor elolvashatja korábbi bejegyzésemet is:a törölt ág helyreállítása a git reflogból.

Az elkötelezettségben végrehajtott változtatások visszavonása

megyvisszaszállnéhány új elkötelezettség rögzítésére szolgál, hogy megfordítsa a korábbi elkötelezettségek hatását.
Szintaxis: git vissza
A bekötési naplókból meg akarom fordítani a kijelölt kötelezettségazonosítóban végrehajtott változtatást:

Parancs: git revert 827bc0d

hogyan lehet osztályos szingulettet készíteni

Jobb, ha nem állítja vissza a „–hard” megosztott elkötelezettségeket, hanem a „git visszaállítja” őket az előzmények megőrzése érdekében, így mindenki számára könnyebbé válik az előzmények naplóinak nyomon követése, hogy megtudja, mi visszavonásra került. és miért?

Használhatja ugyanazt a logikát, amikor a HEAD mutatóra vonatkozó hivatkozásokat hivatkozik ahelyett, hogy megadná a végrehajtási azonosítót, mint a HEAD ~ 3 vagy a HEAD ~ 4 stb.

Rossz nevet adott az ágamnak

Átnevezheti a helyi fiók nevét. Sokszor előfordul, hogy át akarja nevezni a fióktelepét a problémán, amelyen dolgozik, anélkül, hogy át kellene élnie az összes munkája egyik helyről a másikra történő áttelepítését. Például lehet, hogy ugyanazon az ágon vagy egy másik ágon tartózkodik, és mégis átnevezheti a kívánt ágat az alábbiak szerint:
Szintaxis: git ág -m
Parancs: git ág -m old_code old_ # 4920

Ahogy elgondolkodhat azon, hogy a git nyomon követi-e ezt az átnevezést? Igen, utal a „reflog” bejegyzéseidre, itt az enyém:

Az ág átnevezése nem befolyásolja annak távkövető ágát. A távoli szakaszban látni fogjuk, hogyan cseréljük le a távoli adattár ágát

Rendezze át az előzmények naplóit, mielőtt a távirányítóra állna

Hogy szeretném, ha korábban bizonyos kötelezettségeket elkövettem volna, mint mások, és egyáltalán nem tettem volna el néhányat. Interaktív módon újrarendezze és szerkessze a régi kötelezettségvállalásokat a kód hatékony javítása vagy javítása érdekében
Szintaxis: git rebase -i
Parancs: git rebase -i fb0a90e–Kezdje újra a fb0a90e elkövetési id után végrehajtott elkötelezettségek újraértékelését

Látogassa meg újra a git rebase dokumentáció annak megértésére, hogy miben különbözik az „–interaktív vagy -i” újbázis a rendes újbázistól.

Végzett független változtatásokat egyetlen kötelezettségvállalássá

Ebben az esetben egy régi eltemetett elkötelezettséget több logikai kötelezettségre kell felosztani.
Szintaxis: git rebase -i
Parancs: git rebase -i fb0a90e
A rebase szerkesztőben ki kell választania az e7aa9a5 kötelezettség-azonosítót, és a „pick” helyett ‘szerkesztésre’ kell állítania.

nem kapcsolódó változások - gyakori git hibák -Edureka

Most már a projekt id-e7aa9a5 verziójában leszel. Először állítsa vissza az elkövetési előzményeket és az átmeneti területet az előző kötelezettség-parancsra:git reset HEAD ~ 1
Másodszor szerkessze a + stádiumot + külön rendelje el a fájlokat
Parancsok:
git add code && git comm -m 'Kezdeti kódok hozzáadása'
git új kód hozzáadása && git kötelezettség -m 'Új kód hozzáadása'

Harmadszor, folytassa az újrabázist és fejezze be.

Parancs :git rebase - folytassa
Negyedszer, tekintse meg az előzményeket további kötelezettségvállalásokkal.

Parancs: menj hist

az elkötelezettség felosztása többszörösre rebase használatával - gyakori git hibák - Edureka

A szerző-e-mail cím megváltoztatása az összes fióktelep összes elkötelezettségében

Hosszú ideje verzióztam és végeztem a projektfájljaimat git-ben, de eddig soha nem jutott eszembe, hogy az e-mail azonosítóm veszélybe került az elkötelezettség-előzmény naplóimban, amelyeket még a távoli adattárakban is közzétesznek. Nos, ez bárkivel előfordulhat, amikor először konfigurálta a konfigurációkat a „.gitconfig” fájlban. Megkönnyebbülésemre újraírni az általunk megadott környezeti változók egy lekötési objektum létrehozásakor.

Először megkapom a listát e-mail azonosítók hogy eldöntsem azokat, amelyeken változtatni szeretnék:
Parancs: git napló - minden - szép = formátum: '% an% d'–Ez kinyomtatja a szerző nevét (refname / branch-name)

Másodszor, átfutok minden elkötelezettség minden ágon és írd újra az comm objektumot az új e-mail azonosítóval
Parancs:
git filter-branch - env-filter '
ha ['$ GIT_AUTHOR_NAME' = 'divya']
azután
GIT_AUTHOR_EMAIL = 'divya@github.com'
lenni
' -- --minden

Elveszett és talált fájlok

Tegyük fel, hogy elvesztett egy fájlt, és nem emlékszik a nevére, de fel tudna idézni bizonyos szavakat a fájlban. Ebben az esetben ezeket a lépéseket követheti-
1. lépés: Sorolja fel az összes olyan végrehajtást, amely valaha tartalmazta a fájl pillanatképét a keresett mintával
Parancs :git rev-list - minden | xargs git grep -i 'időbélyeg'



2. lépés : Hozzon létre egy új ágat „elveszett-talált” ebből a kiemelt kötelezettség-azonosítóból
Szintaxis: git checkout -b elveszett talált d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Elfelejtettem, melyik fióknál van a kötelezettség-azonosítóm

Időnként, miután észlelt egy hibás végrehajtási azonosítót, érdemes tudni minden ágat, amelyen ez a kötelezettség van, hogy mindet kijavíthassa. Az egyes ágak történelmének ellenőrzése nem túl praktikus egy nagy, több ágat érintő projektben.

A navigációs épület alkalmazásomban elkövetett rossz elkövetés egyszer megtörte a kódot, akkor használtam a „Git bisect” parancs a rossz végrehajtási azonosító észleléséhez majd aparancs:git ág - tartalmazhogy felsorolja az ágakat azzal a rossz elkötelezettséggel.

Tehát, most ismerem az összes ágat, amelyek még mindig rosszul vannak végrehajtva, vagy visszaállíthatom, vagy visszaállíthatom ezt a változáskészletet.

fibonacci c ++ kód

Elkötelezettség törlése az előzményekből

Néha szükségét érzem annak, hogy egyszerűen kitöröljek egy elkötelezettséget a történelemből, és ne hagyjak nyomot rajta. Nem javasolnám, hogy próbálja ki ezt a mutatványt egy megosztott fiókban, hanem csak a helyi fiókjában.
Szintaxis: git rebase -i
Parancs :git rebase -i 93859d8
A rebase szerkesztőben-> cserélje ki a ‘edit’ szót a ’drop’ kifejezésre a kijelölt kötelezettségazonosítóhoz: 69f4813

Bizonyos esetekben ez az újraírás konfliktusokat eredményezhet. Meg kell oldania az ütközéseket, majd folytassa tovább.

Figyelem : Ez egy veszélyes parancs, mivel ez újraírja az előzményeket, és elveszítheti az adatokat. Egy ilyen elágazás eltér a távoli társaitól, és a--Kényszerítésvagy- erő-bérbeadássalválasztási lehetőség.

Rossz ágat tolt a távirányítóhoz

Itt van, amit meg akarok tenni - törölni akarom a távoli ág és ne is kövesse nyomon a helyi fiókomban. ”git push’Parancs, ha a--törölopció törli a távoli ágat. Így kapom meg a klónozott projekt helyi példányát -

git klón https://github.com/greets/myProj.git
cd myProj


Miután a távoli fiókot törölték, a megosztott tárhelyen lévő többi személynek frissítenie és frissítenie kell a távoli referenciákat a--aszalt szilvalehetőség a hiányzó objektum hivatkozások törlésére:git fetch - aszalt szilva -v eredet

Ebben a bejegyzésben megemlítettem néhány gyakori hibát vagy változtatást, amelyek a git segítségével javíthatók. Minden kód egyedi és a maga módján kifejlesztett, ezért a probléma megközelítésének és kijavításának különböző módjai is vannak. Mindig hivatkozhat a tisztviselőre git dokumentáció megérteni, hogy a különféle git-parancsok miként védik meg a forráskódot, és hogyan lehet a parancsokat a lehető legjobb módon kihasználni.

Most, hogy megértette a gyakori Git hibákat, nézze meg ezt az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka DevOps tanúsító tanfolyam segít a tanulóknak megérteni, mi a DevOps, és szert kell szerezni a különféle DevOps folyamatok és eszközök, például a Báb, a Jenkins, a Nagios, az Ansible, a Chef, a Saltstack és a GIT számára az SDLC több lépésének automatizálásához.

Van egy kérdésünk? Kérjük, említse meg a „gyakori Git hibák” megjegyzés rovatában, és mi kapcsolatba lépünk Önnel