Millised on Giti levinumad vead ja kuidas neid parandada?

Koodi versiooniuuendamisel git-versioonisüsteemi tööriistas saate kõige tavalisemad vead tagasi võtta ja oma andmete terviklikkust kaitsta.

Boomiga tehnoloogia, on paratamatu, et iga IT-inimene töötab korraga mitme andmega ja teie andmed arenevad aja jooksul pidevalt. Samuti on hädavajalik jälgida kõiki andmete muutusi ja olla valmis vajadusel soovimatud muudatused tagasi võtma või tagasi võtma.



Pean tunnistama, et oma andmete versioonimine Gitis võimaldab mul olla projekti arendamisel eksperimenteerivam. Kui ma sassi ajan, siis tean, et gitil on alati võimalus oma projekti see versioon tagasi võtta ja / või taastada sellisena, nagu see oli enne keeramist. Iga kiht on loodud selleks, et võimaldada andmete muudatusi enne andmete teisaldamist järgmises etapis üle vaadata ja muuta ning / või parandada. Seega on siin blogis kajastatud järgmised vead:



Failide / kataloogide järk-järgult eemaldamine Indeksist

Failide lisamise ja / või modifitseerimise ajal kipute sageli kasutama käsu ‘git add’ vaikekäitumist, milleks on kõigi failide ja kataloogide lisamine registrisse.Mitu korda tunnete vajadust teatud failid järk-järgult tühistada või neid veel viimati muuta, enne kui need siduma hakkate.



Süntaks: git lähtestamine


failide eemaldamine registrist - levinud git-vead -Edureka

Indeksipiirkonnast failide järkjärguline tühistamine annab teile uue võimaluse oma andmetega uuesti tegeleda, enne kui pühendute kohalikule repole.



Muutke viimati määratud teadet

Käsk: git toime - parandama
Saate redigeerida uusimat pühendussõnumit ilma uut loomata. Kohustuspäevikute loetlemiseks olen määranud varjunime ‘hist’:
Käsk: git config - globaalne alias.hist 'log - päris = formaat: '% C (kollane)% h% Creset% ad | % C (roheline)% s% Creset% C (punane)% d% Creset% C (sinine) [% an] '--graaf --dekoratsioon --kuupäev = lühike'x


Ärge muutke juba kaughoidlasse edastatud ja teistega jagatud täitmisteadet, kuna see muudaks varasema toiminguajaloo kehtetuks ja seega mõjutataks kõiki sellel põhinevaid töid.

Unustasin mõned muudatused viimases kohustuses

Oletame, et unustasite mõningaid muudatusi teha ja olete oma hetktõmmise juba teinud, samuti ei soovi te oma vea esiletõstmiseks teist korda teha.
Käsk: git toime - parandama


Olen rõhutanud, kuidas hiljuti määratud objekti sha-1 id on uuesti loodud ja muudetud. Teesklesin, et olen teinud ühe kohustuse, segades mõlemad muudatused ühte.

Loobu kohalikest muudatustest

Nii et siin on juhtum, kus muutsin faili README ja korraldasin selle. Järgmisena muutsin sama faili teist korda, kuid sain aru, et ma ei soovi teist muudatust.

Lubage mul nüüd kogu muudatust käsitsi tagasi võtta, ma saan faili etapiviisilise versiooni lihtsalt tõmmata.
Süntaks:
git kassasse -–Kohalikud muudatused failis
git kassasse -–Kohalikud muudatused kõigis kataloogi failides & häbelik & häbelik

Käsk: git checkout - LUGEGE

mis on andmete visualiseerimine tabelis

Niisiis, viskasin oma viimased muudatused failis kõrvale ja aktsepteerisin faili etapiviisilist versiooni. Järgmises pühendumises läheb faili järkjärguline versioon kohalikku hoidlasse.

Edastas isikuandmed kohalikku hoidlasse

Soovin eemaldada kohalikust hoidlast teatud andmed, kuid hoida failid töökataloogis.
Süntaks:
git reset - segatud HEAD ~
git reset - segatud

Käsk: git reset - segatud HEAD ~ 1
HEAD ~ 1 tähistab kohustust vahetult enne praeguse haru HEAD poolt viidatud hiljutist kohustust.

Praeguses hetkepildis olevad failid eemaldati nii kohalikust hoidlast kui ka lavastusalalt. Lisage järgmised mustrid globaalsesse .gitignore-faili, et välistada nende git-jälgimine.
vim ~ / .gitignore_global
# paroolifaili #
*.üle andma
*.võti
*. passwd

Selle abil eemaldatakse paroolifailide hetktõmmisega seotud toiming ja saate puhta lavastusala. Minu failid on endiselt minu töökataloogis olemas, kuid neid pole enam kohalikus hoidlas, samuti ei lükata neid kaughoidlasse.

Ettevaatust: Kui need kaotate, ei saa git neid teie jaoks taastada, kuna see ei tea sellest midagi.

Asendage viimane kohustus uue kohustusega

Süntaks: git reset - pehme [/ HEAD ~ n>]

Valik „–soft” lihtsalt eemaldab määratud failid kohalikust hoidlast, kui need on endiselt indeksis etapis, ja saate need pärast ülevaatamist uuesti siduda. on hetkepildi sha-1, mille soovite kohalikust repost eemaldada. kus n on juhtide arv enne HEAD-i sooritamist

Käsk :git reset - pehme HEAD ~ 1


Muutke faile ja lavastage need uuesti

Käsk: git toime -m 'index.html ja style.css lisamine'
Teie pühendumislugu osutub nüüd:

Andis valed andmed

Süntaks:
git reset - kõva HEAD ~ n- lähtestage projekt enne viimast pühendatud hetktõmmist n-le
git reset - raske– Lähtestage projekt antud pühenduse ID hetktõmmisele

Käsk: git reset - raske HEAD ~ 1


Viimane pühendus ja rikutud failid eemaldatakse kohalikust hoidlast, lavastuspiirkonnast ja ka töökataloogist.

Ettevaatust: See on ohtlik käsk, kuna kaotate faile töökataloogis. Ei soovitata kaugjagatud hoidlas.

Tagasi minu vana projekti olekusse

Võite tutvuda projekti ajaloo vanema olekuga. Kui ajate segamini uusimas versioonis või vajate vanema koodi täiustusi, võiksite sellest vanast projekti hetkepildist luua uue haru, et see teie praegust tööd ei takistaks. Vaatame, kuidas:
a. Lisage projekti ajalugu ja otsustage vanema pühenduse ID, käsk:mine hist
b. Loo pühenduse ID-st veel üks haru:git kassasse -b vana riigi e7aa9a5
c. Jätkake koodi kallal töötamist ja hiljem ühendage / taasesitage haru ‘master’.

Kustutatud kohaliku haru taastamine

Kadunud tööd on võimalik regenereerida võrdlusharul. Ütleme, et kustutasin haru ‘vana_kood’ ilma peaharuga liitumata ja kaotasin töö. Ja ei, ma ei lükanud haru ka kaughoidlasse, mis siis? Hästi git rajad ja pidage iga viite kõigi muudatuste päevikukirja, vaatame minu:mine reflog

Niisiis, HEAD @ {2} on kursor, kui kolisin harusse „old_code”, taastagem, et:

Süntaks:git kassasse -b
Käsk:git checkout -b old_code HEAD @ {2}

Selle loomise ajal peate nüüd olema oma uusima tööga harus 'old_code'. Lisaks sellele oli HEAD @ {1} 'reflog' osuti hiljuti filiaalis old_code tehtud kohustus. Selle ainulaadse taastamiseks pühenduma, käivitage käsk lihtsalt järgmiselt:git reset - raske HEAD @ {1}.See taastab ka muudetud failid töökataloogis.

Kui soovite üksikasjalikult teada saada, kuidas see käsk töötab ja kuidas saate hallata reflog-kirjeid, võite sama hästi lugeda minu varasemat postitustkustutatud haru taastamine git reflogist.

Pühendumises tehtud muudatuste tagasivõtmine

minetagasi pöördumakasutatakse mõne uue kohustuse registreerimiseks, et muuta mõne varasema kohustuse mõju vastupidiseks.
Süntaks: git tagasi
Oma toimingute logidest sooviksin tühistada esiletõstetud toime ID-s tehtud muudatused:

Käsk: git revert 827bc0d

Parem on see, et te ei lähtesta jagatud toiminguid „–hard”, vaid „git ennistab” need ajaloo säilitamiseks, nii et kõigi jaoks on lihtsam logiajaloo jälitamine, et teada saada, kes on tagasi teinud ja miks?

Võite kasutada sama loogikat, kui suunate HEAD-kursorit puudutavate toimingute tegemise, selle asemel et anda käsu ID, nagu näiteks HEAD ~ 3 või HEAD ~ 4 ja nii edasi.

Andis minu filiaalile vale nime

Kohaliku haru nime saate ümber nimetada. Nii juhtub mitu korda, et võiksite oma filiaali ümber nimetada selle probleemi tõttu, millega tegelete, ilma et peaksite kogu oma töö ühest kohast teise migreerimisel kannatama. Näiteks võite olla kas samal harul või teisel harul ja siiski soovitud haru ümber nimetada, nagu allpool näidatud:
Süntaks: git haru -m
Käsk: git haru -m vana_kood vana_ # 4920

Nagu võite mõelda, kas git jälgib seda ümbernimetamist? Jah, see viitab teie reflog-kirjetele, siin on minu:

Filiaali ümbernimetamine ei mõjuta selle kaugjälgimise haru. Kuidas kaughoidlas haru asendada, näeme kaugjaotises

Enne kaugjuhtimispuldi seadistamist korraldage ajaloo logid uuesti

Kuidas ma sooviksin, et oleksin teinud teatud kohustusi varem kui teised ja poleks mõnda kohustust üldse teinud. Korda tõhusalt parandamiseks või täiustamiseks vanade kohustuste interaktiivne ümberkorraldamine ja muutmine
Süntaks: git rebase -i
Käsk: git rebase -i fb0a90e- alustage nende kohustuste ümberhindamist, mis tehti pärast toime-ID fb0a90e

Külastage uuesti git uuesti dokumentatsioon, et mõista, kuidas erineb „-interaktiivne või -i” taaskäivitamine tavalisest taaskäivitamisest.

Seotud muudatused ühtseks kohustuseks

Sellisel juhul peate vana maetud kohustuse jagama mitmeks loogiliseks toiminguks.
Süntaks: git rebase -i
Käsk: git rebase -i fb0a90e
Rebase'i redaktoris peate valima e7aa9a5 toime id ja muutma selle 'vali' asemel 'redigeeri'.

mitteseotud muudatused - levinud gitivead -Edureka

Olete nüüd projekti versioonis toime pandud ID-e7aa9a5. Kõigepealt lähtestage pühendamisajalugu ja lavastusala eelmisele käsule Command:git reset HEAD ~ 1
Teiseks muutke faile + etapp + määrake failid eraldi
Käsud:
git add code && git toime -m 'Esialgsete koodide lisamine'
git uue koodi lisamine && git toime -m 'Uue koodi lisamine'

Kolmandaks, jätkake uuesti ja lõpetage.

Käsk :git rebase - jätkake
Neljandaks, vaadake ajalugu lisakohustustega.

Käsk: mine hist

kohustuse jagamine mitmeks, kasutades rebase

Autori-e-posti aadressi muutmine kõigis filiaalides tehtavates toimingutes

Olen oma projektifaile juba pikka aega versiooninud ja teinud seda juba pikka aega, kuid siiani ei tabanud mind, et minu e-posti aadressi oleks rikutud minu kohustuste ajaloo logides, mis on isegi kaughoidlates avaldatud. Noh, see võib juhtuda kellegagi, kui seadistate algselt failis '.gitconfig' seadistused. Minu kergenduseks saab uuesti kirjutama keskkonnamuutujad, mida pakume sidumisobjekti loomisel.

Kõigepealt saan nimekirja e-posti ID-d otsustada need, mida ma muuta tahan:
Käsk: git log - kõik - päris = formaat: '% an% d'–See prindib autori nime (refname / filiaali nimi)

Teiseks jooksen läbi iga pühendumine igas harus ja kirjutage uue e-posti ID-ga toiminguobjekt uuesti
Käsk:
git filter-haru - env-filter '
kui ['$ GIT_AUTHOR_NAME' = 'divya']
siis
GIT_AUTHOR_EMAIL = 'divya@github.com'
olema
'- - kõik

hashmap vs hashtable javas

Kadunud ja leitud failid

Oletame, et olete kaotanud kindla faili ja te ei mäleta selle nime, kuid võiksite failis teatud sõnu meelde tuletada. Sellisel juhul võite järgida neid samme-
Samm 1: Loetlege kõik toimingud, mis kunagi sisaldasid otsitud mustriga faili hetktõmmist
Käsk :git rev-list - kõik | xargs git grep -i 'ajatempel'



2. samm : Looge sellest esiletõstetud pühenduse-ID-st uus haru 'kadunud-leitud'
Süntaks: git checkout -b kaotatud leitud d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Unustasin, millises harus on minu kohustuse ID

Mõnikord võite pärast lollaka toimingu ID tuvastamist teada ka kõiki harusid, millel see kohustus on, et saaksite need kõik parandada. Iga haru ajaloo kontrollimine ei ole suures mitme haruga projektis eriti otstarbekas.

Minu navigatsioonihoone rakenduses tehtud halb lubadus rikkus korra koodi, just siis kasutasin seda 'Git bisect' käsk halva käitumise ID tuvastamiseks järgnebkäsk:git haru - sisaldabselle halva pühendumusega harude loetlemiseks.

Niisiis, nüüd tean kõiki harusid, millel on endiselt halb kohustus, võiksin selle muudatuste komplekti ennistada või lähtestada.

Kustuta kohustus ajaloost

Mõnikord tunnen vajadust lihtsalt pühendumus ajaloost välja pühkida ja sellest jälge jätta. Ma ei soovitaks teil seda trikki proovida ühises harus, vaid ainult kohalikus harus.
Süntaks: git rebase -i
Käsk :git rebase -i 93859d8
Rebase'i redaktoris asendage esiletõstetud toimingu ID: 69f4813 ‘edit’ sõnaga ‘drop’

Mõnel juhul võib see ümberkirjutamine põhjustada konflikte. Konfliktid peate lahendama, seejärel jätkake.

Hoiatus : See on ohtlik käsk, kuna see kirjutab ajaloo uuesti ja võib kaotada andmeid. Selline haru erineb kaugservast ja seda tuleb lükata koos- jõudvõi- jõud koos rendigavalik.

Lükkas puldile vale haru

Siin on see, mida ma tahan teha - ma tahan kustutada a kaugharu ja lõpetage selle jälgimine ka minu kohalikust filiaalist. ”git push‘Käsk, kui seda kasutatakse koos- kustutavalik kustutab kaugharu. Nii saan kloonitud projekti kohaliku koopia -

git kloon https://github.com/greets/myProj.git
cd myProj


Kui kaugharu on kustutatud, peavad teised jagatud repos värskendama ja värskendama oma kaugviiteid--kuivatatud ploomvõimalus puuduvate objektiviidete kustutamiseks:git fetch --prune -v päritolu

Selles postituses olen maininud mõningaid levinumaid vigu või muudatusi, mida git aitab teil parandada. Iga kood on ainulaadne ja omal moel välja töötatud, nii et probleemile lähenemiseks ja lahendamiseks on ka erinevaid viise. Alati võiks ametnikule viidata git dokumentatsioon mõista, kuidas erinevad git-käsud teie lähtekoodi kaitsevad ja kuidas käske parimal viisil kasutada.

Nüüd, kui olete aru saanud levinud Giti vigadest, vaadake seda Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Edureka DevOpsi sertifitseerimiskoolitus aitab õppijatel aru saada, mis on DevOps, ning omandada teadmisi mitmesuguste DevOpsi protsesside ja tööriistade kohta, nagu Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack ja GIT SDLC mitmete sammude automatiseerimiseks.

Kas teil on meile küsimus? Palun mainige seda selle „levinud Giti vigade“ kommentaaride osas ja me võtame teiega ühendust