Ano ang mga karaniwang pagkakamali sa Git at kung paano ayusin ang mga ito?



I-undo ang pinakakaraniwang mga pagkakamali habang nai-bersyon ang iyong code sa tool sa system ng pag-bersyon ng git at protektahan ang integridad ng iyong data.

Gamit ang boom ng teknolohiya, hindi maiiwasan para sa sinumang IT na tao na gumana sa maraming data nang sabay-sabay at ang iyong data ay laging umuunlad sa paglipas ng panahon. Mahalaga rin na subaybayan ang bawat pagbabago sa data at maging handa na i-undo o ibalik ang anumang hindi nais na pagbabago kapag kinakailangan.

Dapat kong kumpisihin, ang pag-bersyon ng aking data sa Git ay nagpapahintulot sa akin na maging mas eksperimento sa aking pag-unlad ng proyekto. Kung magkagulo ako, alam kong palaging may paraan ang git upang ma-undo at / o ibalik ang bersyon ng aking proyekto sa paraan na ito bago ako umiskot. Bawat isa ang layer ay idinisenyo upang payagan ang mga pagbabago sa data na masuri at mabago at / o maitama bago ilipat ang data sa susunod na yugto. Kaya ang mga sumusunod ay mga pagkakamali na sakop sa blog na ito:





Un-yugto ng mga file / direktoryo mula sa Index

Habang nagdaragdag at / o nagbabago ng mga file ay madalas mong gamitin ang default na pag-uugali ng 'git add' na utos, na idaragdag ang lahat ng mga file at direktoryo sa Index.Maraming oras na sa tingin mo ay kailangang i-un-entablado ang ilang mga file o baguhin ang mga ito sa huling pagkakataon bago gawin ang mga ito.



Syntax: git reset


alisin ang mga file mula sa Index - karaniwang mga pagkakamaliang git -Edureka

Ang pag-unageage ng mga file mula sa lugar ng Index ay magbibigay sa iyo ng isa pang pagkakataong muling gumana sa iyong data bago gumawa sa isang lokal na repo.



I-edit ang huling nakatuong mensahe

Utos: git commit --amend
Maaari mong i-edit ang pinakabagong mensahe ng pangako nang hindi lumilikha ng bago. Upang mailista ang mga nag-log log, nagtakda ako ng isang alias na 'hist':
Utos: git config --global alias.hist 'log --pretty = format: '% C (dilaw)% h% Creset% ad | % C (berde)% s% Creset% C (pula)% d% Creset% C (asul) [% an] '--graph --decorate --date = short'x


Huwag baguhin ang gumawa ng mensahe na naitulak na sa isang remote na imbakan at ibinahagi sa iba, dahil gagawin nitong hindi wasto ang naunang kasaysayan ng gumawa at sa gayon ang anumang gawaing batay sa maaaring maapektuhan.

Nakalimutan ang ilang mga pagbabago sa huling nagawa

Sabihin nating nakalimutan mong gumawa ng ilang mga pagbabago at nakatuon na ang iyong snapshot, hindi mo rin nais na gumawa ng isa pang pangako upang i-highlight ang iyong pagkakamali.
Utos: git commit --amend


Na-highlight ko kung paano muling nilikha at nabago ang sha-1 id ng kamakailang object object. Nagpanggap ako na gumawa ng isang solong pagsang-ayon na pinaghalo ang parehong mga pagbabago sa isa.

Itapon ang mga lokal na pagbabago

Kaya, narito ang isang kaso kung saan binago ko ang file na 'README' at itinanghal ito. Susunod, binago ko ang parehong file sa pangalawang pagkakataon ngunit napagtanto na hindi ko nais ang pangalawang pagbabago.

Ngayon, hayaan mo akong huwag i-undo nang manu-mano ang buong pagbabago, maaari ko lamang hilahin ang itinanghal na bersyon ng file.
Syntax:
git checkout -–Mga lokal na pagbabago sa isang file
git checkout -–Mga lokal na pagbabago sa lahat ng mga file sa direktoryo at nahihiya at nahihiya

Utos: git checkout - README

Kaya, itinapon ko ang aking huling mga pagbabago sa file at tinanggap ang itinanghal na bersyon ng file. Sa susunod na gumawa, ang itinanghal na bersyon lamang ng file ang napupunta sa lokal na imbakan.

Gumawa ng personal na data sa lokal na lalagyan

Nais kong alisin ang ilang data mula sa lokal na imbakan ngunit panatilihin ang mga file sa gumaganang direktoryo.
Syntax:
git reset --mixed HEAD ~
git reset --mixed

Utos: git reset --mixed HEAD ~ 1
Ang Ulo ~ 1 ay nagpapahiwatig ng isang paggawa bago pa lamang ang kamakailang pagtataguyod na itinuro ng kasalukuyang sangay na ULO.

kung paano mag-setup ng atom para sa sawa

Ang mga file sa kasalukuyang snapshot ay tinanggal mula sa parehong lokal na imbakan at ang lugar ng pagtatanghal. Idagdag ang mga sumusunod na pattern sa pandaigdigang .gitignore file upang maibukod ang mga ito mula sa sinusubaybayan ng git.
vim ~ / .gitignore_global
# mga file ng password #
* .pass
* .key
* .passwd

Sa pamamagitan nito, ang pagtataguyod na nagkaroon ng snapshot ng mga file ng password ay tinanggal, at nakakakuha ka ng isang malinis na lugar ng pagtatanghal. Ang aking mga file ay naroroon pa rin sa aking gumaganang direktoryo ngunit hindi na naroroon sa lokal na lalagyan, hindi rin maitutulak sa isang remote na lalagyan.

Pag-iingat: Kung mawala ka sa kanila ang git ay hindi mababawi ang mga ito para sa iyo dahil hindi nito nalalaman ang tungkol dito.

Palitan ang pinakabagong gumawa ng bagong komit

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

Ang opsyong ‘–soft’ ay aalisin lamang ang nakatuon na mga file mula sa lokal na lalagyan habang itinatakda pa rin sila sa Index at maaari mo silang muling gawing pagkatapos ng isang pagsusuri. ay ang sha-1 ng snapshot na nais mong alisin mula sa lokal na repo. kung saan n ang bilang ng mga gumawa bago gumawa ng PUNO

Utos :git reset --soft HEAD ~ 1


Baguhin ang mga file at i-entablado muli ang mga ito

Utos: git commit -m 'Pagdaragdag ng index.html at style.css'
Ang iyong kasaysayan sa paggawa ngayon ay naging:

Nakagawa ng maling data

Syntax:
git reset - mahirap HEAD ~ n–Maayos ang proyekto sa 'n' na gumawa bago ang pinakabagong nakuhang snapshot
git reset - mahirap–Reset ang proyekto upang maibigay ang snapshot ng gumawa id

Utos: git reset - mahirap HEAD ~ 1


Ang pinakabagong gumawa at ang mga sira na file ay tinanggal mula sa lokal na imbakan, lugar ng pagtatanghal ng lugar pati na rin ang gumaganang direktoryo.

Pag-iingat: Ito ay isang mapanganib na utos habang natapos mo ang pagkawala ng mga file sa gumaganang direktoryo. Hindi inirerekumenda sa isang malayuang ibinahaging repository.

Bumalik sa dati kong estado ng proyekto

Maaari kang mag-umpisa sa isang mas matandang estado ng iyong proyekto sa kasaysayan ng oras. Kung magkagulo ka sa pinakabagong bersyon o kailangan ng mga pagpapahusay sa mas lumang code, baka gusto mong lumikha ng isa pang sangay sa lumang snapshot ng proyekto upang hindi makagambala sa iyong kasalukuyang trabaho. Tingnan natin kung paano:
a. Ilista ang kasaysayan ng proyekto at magpasya sa mas matandang gumawa ng id, utos:go hist
b. Lumikha ng isa pang sangay mula sa commit id:git checkout -b old-state e7aa9a5
c. Magpatuloy na magtrabaho sa code at sa paglaon ay sumanib / muling ibahin ang sangay na 'master'.

I-recover ang isang tinanggal na lokal na sangay

Posibleng buhayin muli ang nawalang trabaho sa isang sangay ng sanggunian. Sabihin, tinanggal ko ang sangay na 'old_code' nang hindi pagsasama sa pangunahing sangay at nawala ang trabaho. At hindi, hindi ko itinulak ang sangay sa isang remote na imbakan, ano pagkatapos? Mahusay na sinusubaybayan at panatilihin ang isang entry sa journal ng lahat ng mga pagbabagong nagawa sa bawat sanggunian, tingnan natin ang minahan:go reflog

Kaya, ang HEAD @ {2} ang pointer nang lumipat ako sa sangay na 'old_code', bawiin natin iyon:

Syntax:git checkout -b
Utos:git checkout -b old_code HEAD @ {2}

Dapat ay nasa branch ka na 'old_code' kasama ang iyong pinakabagong gawain sa oras ng paglikha nito. Bukod pa rito, ang 'reflog' pointer sa HEAD @ {1} ay ang kamakailang ginawa na ginawa sa sangay na 'old_code'. Upang maibalik ang natatanging ito patakbuhin lamang ang utos bilang:git reset - mahirap HEAD @ {1}.Ibinabalik din nito ang binagong mga file sa gumaganang direktoryo.

Kung nais mong malaman nang detalyado kung paano gumagana ang utos na ito at kung paano mo mapamahalaan ang mga entry na 'reflog', maaari mo ring basahin ang aking naunang post sapagbawi ng natanggal na sangay mula sa git reflog.

I-undo ang mga pagbabagong nagawa sa isang komit

punta ka naibalikay ginagamit upang maitala ang ilang mga bagong paggawa upang baligtarin ang epekto ng ilang naunang paggawa.
Syntax: git balikan
Mula sa aking mga tala ng paggawa, nais kong baligtarin ang pagbabagong nagawa sa naka-highlight na id na id:

Utos: git balikan ang 827bc0d

Mas mabuti, na hindi mo i-reset '–hard' ang nakabahaging mga komit, ngunit sa halip ay 'git balikan' ang mga ito upang mapanatili ang kasaysayan upang mas madali para sa lahat na subaybayan ang mga tala ng kasaysayan upang malaman kung ano ang nabalik, kung kanino at bakit?

Maaari mong gamitin ang parehong lohika ng pagtukoy sa mga ginawa tungkol sa HEAD pointer sa halip na ibigay ang gumawa id, tulad ng sa HEAD ~ 3 o HEAD ~ 4 at iba pa.

Nagbigay ng maling pangalan sa aking sangay

Maaari mong palitan ang pangalan ng isang lokal na pangalan ng sangay. Ito ay nangyayari nang maraming beses na maaari mong hilingin na palitan ang pangalan ng iyong sangay batay sa isyung iyong pinagtatrabahuhan nang hindi dumadaan sa sakit ng paglipat ng lahat ng iyong trabaho mula sa isang lokasyon patungo sa iba pa. Halimbawa, maaari kang maging sa parehong sangay o ibang sanga at maaari mo pang palitan ang pangalan ng nais na sangay tulad ng ipinakita sa ibaba:
Syntax: git branch -m
Utos: git branch -m old_code old_ # 4920

Tulad ng maaari kang magtaka ang git ay nagpapanatili ng isang track ng pangalan na ito? Oo, tumutukoy ito sa iyong mga entry na 'reflog', narito ang akin:

Ang pagpapalit ng pangalan ng isang sangay ay hindi makakaapekto sa sangay ng remote-tracking nito. Makikita natin sa malayong seksyon kung paano palitan ang isang sangay sa remote na imbakan

Muling ayusin ang mga tala ng kasaysayan bago itulak sa remote

Kung paano ko ninanais na mas gumawa ako ng ilang mga komit nang mas maaga kaysa sa iba at hindi na ako gumawa ng lahat. Interactive na muling ayusin at mai-edit ang mga dating gumawa upang mabisang mag-ayos o mapahusay ang code
Syntax: git rebase -i
Utos: git rebase -i fb0a90e–Start rebasing ang mga commits na ginawa pagkatapos ng gumawa-id fb0a90e

Muling bisitahin ang git rebase dokumentasyon upang maunawaan kung paano naiiba ang isang ‘–interactive o -i’ rebase naiiba mula sa isang regular na rebase.

Nakagawa ng mga hindi kaugnay na pagbabago sa iisang pagbibigay

Sa kasong ito, kailangan mong hatiin ang isang lumang inilibing na gawing maraming mga lohikal na pangako.
Syntax: git rebase -i
Utos: git rebase -i fb0a90e
Sa rebase editor, dapat mong piliin ang e7aa9a5 gumawa id at palitan ito ng 'i-edit' sa halip na 'pumili'.

mga hindi kaugnay na pagbabago - karaniwang mga pagkakamaliang git -Edureka

Ikaw ay nasa bersyon ng proyekto ng commit id-e7aa9a5. Una, i-reset ang kasaysayan ng gumawa at lugar ng pagtatanghal ng dating sa Command na Kumuha:git reset HEAD ~ 1
Pangalawa, i-edit ang + yugto + isa-isang isagawa ang mga file
Mga Utos:
git add code && git commit -m 'Pagdaragdag ng mga paunang code'
git magdagdag ng newcode && git commit -m 'Pagdaragdag ng bagong code'

Pangatlo, ipagpatuloy ang rebase at tapusin.

Utos :git rebase - magpatuloy
Pang-apat, tingnan ang kasaysayan sa mga karagdagang paggawa.

Utos: go hist

paghahati gumawa sa maramihang paggamit ng rebase - karaniwang mga pagkakamali git - Edureka

Baguhin ang may-akda-email sa lahat ng mga pagawa sa lahat ng mga sangay

Ako ay nag-a-bersyon at gumagawa ng aking mga file ng proyekto sa git mula nang mahabang panahon ngayon, ngunit hanggang ngayon ay hindi ito nasaktan sa akin na ang aking email id ay nakompromiso sa aking mga tala ng kasaysayan ng gumawa na kahit na na-publish sa mga malalayong repository. Sa gayon, maaaring mangyari ito sa sinuman kapag una mong na-set up ang mga pagsasaayos sa '.gitconfig' na file. Sa aking lunas na git ay maaaring muling pagsusulat ang mga variable ng kapaligiran na ibinibigay namin kapag lumilikha ng isang object na nais.

Una nakukuha ko ang listahan ng mga email id upang magpasya sa mga nais kong baguhin:
Utos: git log --all --pretty = format: '% an% d'–Ni-print ang pangalan ng may-akda (refname / branch-name)

Pangalawa, nasagasaan ko bawat gumawa sa bawat sangay at muling isulat ang gumawa ng object gamit ang bagong email id
Utos:
git filter-branch --env-filter '
kung ['$ GIT_AUTHOR_NAME' = 'divya']
tapos
GIT_AUTHOR_EMAIL = 'divya@github.com'
maging
'- --lahat

Nawala at natagpuan ang mga file

Ipagpalagay na nawala sa iyo ang isang tiyak na file at hindi mo matandaan ang pangalan nito, ngunit maaari mong isipin ang ilang mga salita sa file. Sa kasong ito, maaari mong sundin ang mga hakbang na ito-
Hakbang 1: Ilista ang lahat ng mga pangako na naglalaman ng file snapshot na may hinanap na pattern
Utos :git rev-list --lahat | xargs git grep -i 'timestamp'



Hakbang 2 : Lumikha ng isang bagong sangay na 'lost-found' mula sa naka-highlight na commit-id na ito
Syntax: git checkout -b nawala-natagpuan d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Nakalimutan kung aling sangay ang may aking commit-id

Sa mga oras, pagkatapos mong makita ang isang buggy commit id baka gusto mong malaman ang lahat ng mga sangay na mayroon sa kanila na ito upang maayos mo silang lahat. Ang pagsuri sa kasaysayan ng bawat sangay ay hindi masyadong praktikal sa isang malaking proyekto ng maraming sangay.

Ang isang hindi magandang ginawa sa aking aplikasyon sa pagbuo ng nabigasyon sa sandaling sinira ang code, doon ko ginamit ang Ang 'git bisect' na utos upang makita ang gumawa ng id na hindi maganda sinundan ngutos:sangay ng git - naglalaman ng mga nilalamanupang ilista ang mga sangay na may masamang pangako.

Kaya, ngayon alam ko na ang lahat ng mga sangay na mayroon pa ring masamang nakagagawa, maaari kong ibalik o i-reset ang Changeetet na ito.

Tanggalin ang isang gumawa mula sa kasaysayan

Minsan nararamdaman ko ang pangangailangan na burahin lamang ang isang gumawa mula sa kasaysayan at huwag iwanan ang landas nito. Hindi ko inirerekumenda na subukan mo ang stunt na ito sa isang nakabahaging sangay ngunit sa iyong lokal na sangay lamang.
Syntax: git rebase -i
Utos :git rebase -i 93859d8
Sa rebase editor-> palitan ang 'i-edit' ng 'drop' para sa naka-highlight na gumawa id: 69f4813

Sa ilan sa mga kaso, ang muling pagsulat na ito ay maaaring magresulta sa mga salungatan. Dapat mong malutas ang mga salungatan pagkatapos ay magpatuloy sa karagdagang.

Babala : Ito ay isang mapanganib na utos dahil muling isinusulat ang kasaysayan at maaaring mawalan ng data. Ang gayong sangay ay naiiba sa remote-counterpart nito at kailangang itulak ng- lakaso--force-with-leasepagpipilian

Itinulak ang isang maling sangay sa remote

paggamit ng klase ng scanner sa java

Ngayon, narito ang nais kong gawin- nais kong tanggalin ang a malayong sangay at ihinto din ang pagsubaybay nito mula sa aking lokal na sangay. 'git push‘Utos kapag ginamit sa--deleteTinatanggal ng pagpipilian ang remote na sangay Kaya, ito ang paraan kung paano ko makukuha ang lokal na kopya ng na-clone na proyekto -

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


Minsan, ang remote na sanga ay tinanggal ng iba sa nakabahaging repo dapat na i-refresh at i-update ang kanilang mga remote na sanggunian sa--prunepagpipilian upang tanggalin ang mga nawawalang sanggunian ng bagay:hinuhuli ang git --prune -v pinagmulan

Sa post na ito, nabanggit ko ang ilan sa mga karaniwang pagkakamali o pagbabago na makakatulong sa iyo na ayusin ang git. Ang bawat code ay natatangi at binuo sa paraan nito, kaya mayroon ding iba't ibang paraan ng paglapit at pag-aayos ng isang problema. Maaari kang laging sumangguni sa opisyal dokumentasyon ng git upang maunawaan kung paano pinangangalagaan ng iba't ibang mga utos na git ang iyong source code at kung paano magagamit ang mga utos sa pinakamahusay na paraang posible.

Ngayon na naintindihan mo na ang karaniwang mga pagkakamali sa Git, tingnan ito ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa Edureka DevOps Certification Training ay tumutulong sa mga nag-aaral na maunawaan kung ano ang DevOps at makakuha ng kadalubhasaan sa iba't ibang mga proseso at tool ng DevOps tulad ng Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack at GIT para sa pag-automate ng maraming mga hakbang sa SDLC.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng 'karaniwang mga pagkakamaliang Git' at babalikan ka namin