Git Reflog - Paano mababawi ang isang tinanggal na sangay na hindi pagsasama



Ang artikulong ito sa Git Reflog ay isang komprehensibong gabay sa kung paano ibalik ang tinanggal na branched sa Git sa tulong ng Git Reflog.

'Nawalan ka ba ng isang sangay, na ang mapagkukunan ng code ay hindi pa nagsasama sa sangay na 'pinakawalan' o ang 'pangunahing' sangay? Paano kung nais mong muling buhayin ang isang natanggal na sangay kahit na ang gawain nito ay na-merge na sa pangunahing sangay? ' . Sa gayon, ang tanging solusyon sa mga nasabing senaryo ay Pumunta sa Reflog .

Sa pamamagitan ng artikulong ito sa Git Reflog, tutulungan kitamaunawaan ang mga sitwasyon kung saan ang iyong trabaho sa isang sangay ay maaaring mawala at kung paano mabawi ang sangay.Gayundin, ipapakita ng artikulong ito ang diskarte na maaari mong gawin upang maiwasan ang hindi inaasahang pagkawala ng isang sangay habang nagtatrabaho sa isang malaking proyekto.





    1. Ano ang Git Reflog?
    2. Paano at kailan tatanggalin ang isang sangay?
    3. I-recover ang natanggal na sangay
    4. Anong gawain ang naibalik kapag na-recover ang natanggal na sangay?
    5. Mga Sub-utos ng Git Reflog

Kaya, magsimula tayo sa artikulong ito.



Isaalang-alang ang isang senaryo, isang mKailangang pagsamahin ng aintainer ang maraming mga tampok na sanga mula sa iba't ibang mga nakikipagtulungan at pagkatapos ay tanggalin ang mga ito sa paglaon ngunit ang sangay ay natanggal nang hindi sinasadya bago ang pagsasama-sama ng trabaho?

Kaya, bago ako magpatuloy sa artikulong ito, hayaan mong sabihin ko sa iyo na hindi posible sa Git. ay ligtas at kumilos bilang isang check post ay hindi magpapahintulot sa iyo na gawin ito. Kaya, dito kung saan makikita ang larawan sa Git Reflog.

Ano ang Git Reflog?

AngPinapanatili ng 'reflog' na utos a subaybayan ng bawat solong pagbabago na ginawa sa mga sanggunian (mga sangay o tag) ng isang lalagyan at pinapanatili ang isang kasaysayan ng pag-log ng mga sanga at tag na nilikha nang lokal o naka-check out. Ang mga sanggunian na log tulad ng gumawa ng snapshot ng noong ang sangay ay nilikha o na-clone, naka-check-out, pinalitan ng pangalan, o anumang mga gawaing ginawa sa sangay ay pinananatili ng at nakalista sa pamamagitan ng 'reflog' na utos.



Tandaan: Mababawi lamang ang sangay mula sa iyong direktoryo sa pagtatrabaho kung ang sangay ay mayroon sa iyong lokal na imbakan i.e. ang sangay ay alinman nilikha nang lokal o naka-check out mula sa isang remote na imbakan sa iyong lokal na lalagyan para maimbak ni Git ang mga sanggunian ng kasaysayan nito.

Ang utos na ito ay kailangang ipatupad sa lalagyan na nawala ang sangay. Kung isasaalang-alang mo angmalayuang sitwasyon sa pag-iimbak, pagkatapos ay kailangan mong isagawa ang utos ng reflog sa makina ng nag-develop na nagkaroon ng sangay.

utos: go reflog

Ngayong alam mo na, ano ang Git Reflog, hayaan mo kamisubukang tanggalin ang parehong isang pinagsama at isang hindi pinagsamang sangay at tingnan kung paano ito hahawakan ng Git?

Hakbang 1: Ilista ang mga sanga na pinagsama sa master

Una, mag-check out sa ‘ panginoon ’Branch kung ikaw ay nasa ibang mga sangay na gumagamit ng utos:

$ git master ng pag-checkout

Paglabas

Git Checkout Master - Git Reflog - Edureka

Ngayon, upang makakuha ng isang listahan ng mga pinagsamang sangay, banggitin ang sumusunod na utos:

sangay na $ git - pinagtagpo

Output:

Hakbang 1.1: Pagkatapos, tanggalin ang pinagsamang sangay:

$ git branch -d isyu # 902

Output:

Ang sangay na 'isyu # 902' ay matagumpay na na-delete dahil isinama na ito sa sangay na 'master'.

Hakbang 2: Ngayon, ilista natin ang mga sanga na hindi pinagsama sa master.

$ git branch - hindi pinagsama

Paglabas

Hakbang 2.2: Panghuli, tanggalin natin ang isang hindi pinagsamang sangay gamit ang sumusunod na utos:

$ git branch -d prepod

Kung susubukan mong tanggalin ang isa sa mga sanga na may hindi natapos na trabaho sabihin ang sangay na 'preprod', ipinapakita ng git ang isang mensahe ng babala.

Paglabas

Ngayon, bago ko sabihin sa iyo kung paano mo mababawi ang data sa artikulong ito sa Git Reflog, hayaan mong sabihin ko sa iyo kung ano ang eksaktong nangyayari kapag natanggal ang isang sangay at sa ilalim ng anong mga pangyayari na maaaring makuha ang sangay.

Paano at kailan tatanggalin ang isang sangay?

Tulad ng alam natin na ang Git ay a Ipinamahagi na System ng Control ng Bersyon (DVCS), bawat machine na may clone o isang kopya ng repository na kumilos bilang pareho node at a hub . Itonagpapahiwatig na ang bawat machine ay magkakaroon ng sariling kopya ng buong repository code at kasaysayan.Hindi na kailangang sabihin na ikaw ay magiging pagbabahagi ang iyong trabaho sa iba at naglalathala pareho.

Samakatuwid, sa mga ganitong sitwasyon, maaaring mayroong 3 mga kaso kapag natanggal ang isang sangay sa isang pangyayari sa real-world na may maraming mga nag-ambag na nagtatrabaho sa isang malaking proyekto. Ang mga sumusunod ay maaaring ang mga kaso:

Kaso 1 - Ang isang Developer ay maaaring pagsamahin o tanggalin ang sangay

Isaalang-alang ang isang senaryo kung saan pinagsasama ng isang developer ang tampok na sangay sa pangunahing sangay nang lokal at pagkatapos ay tinatanggal ang tampok na sangay gamit ang ‘ sangay ng git 'Utos kasama ang '- d ”Flag tulad ng nakikita sa mga naunang screenshot.

Utos: 'Git branch -d branch_name'

Maaari ring mangyari na nagpasya ang developer na basurahan ang mga pagbabago sa sangay at magpasya na tanggalin ang sangay nang hindi isinasama ito sa anumang iba pang sangay gamit ang sumusunod na utos:

Utos: 'Git branch -D branch_name'

Sa utos sa itaas, ang developer aypilit na tinanggal ang sangay na overriding ang babala ng git

$ git branch -D preprod

Paglabas

Tandaan : Ang sanga ng 'preprod' ay hindi na maililista kapag pinatakbo mo ang 'git branch' na utos. Kaya, ymawawala ang aming gawaing nai-save sa sangay na ito.

Kaso 2 - Tinatanggal ng isang Developer ang isang sangay sa isang nakabahaging repository

Isaalang-alang ang isang senaryo, kung saan ang isang developer na may access na magbasa / sumulat ay sumusubok na burahin ang remote na sangay ng pilit nagamit ang command na ‘git push’ gamit ang watawat na ‘–delete’.

Pinagmulan ng pagtulak ng $ git - tanggalin ang quickfix

Paglabas

pivot at undivot sa sql server

Maliban dito, maaari ding magkaroon ng kaso kung saan pinipilit ng isang hindi awtorisado o nakakahamak na user ang isang pagtulak na tanggalin ang remote na sangay.Sa ganitong kaso, mababawi lamang ng nagpapanatili ang natanggal na sangay ng 'quickfix' lamang kung ang developerdating nag-check out sa sangay na ito. Sa senaryong ito, ang lokal na lalagyan nito ay magkakaroon pa rin ng mga sanggunian na log nito.

Kung hindi ma-recover ng nagpapanatili ang sangay, kung gayon ang may-ari ng sangay na tinanggal nito ay dapat na makuha mula sa kanyang mga lokal na reflog.

Kaso 3 - Isang hook script na may sobrang mga pribilehiyo ay tinatanggal ang sangay

Maaari itong maging isang bihirang ngunit, isang posibleng senaryo na ang isang script ng kawit ay napalitaw sa ilang mga kaganapan sa pagpapatakbo ng git at pinipilit ang pagtanggal sa mga sangay na hindi pa nasasama. Kaya moisaalang-alang ang isa sa mga nabanggit na utos na naka-script sa isang hook script na may mga pribilehiyong sudo.

Ngayon, na alam mo kung ano ang nangyayari, kapag tinanggal mo ang sangay, magpatuloy kami sa artikulong ito sa Git Reflog at tingnan kung paano mabawi ang isang nawalang sanga.

Ibalik muli ang isang tinanggal na sangay gamit ang Git Reflog

Hakbang 1 : Mga tala ng kasaysayan ng lahat ng mga sanggunian

Kumuha ng isang listahan ng lahat ng mga lokal na naitala na tala ng kasaysayan para sa lahat ng mga sanggunian ('master', 'uat' at 'prepod') sa repository na ito.

go reflog

Hakbang 2 : Kilalanin ang stamp ng kasaysayan

Tulad ng maaari kang mag-refer mula sa snapshot sa itaas, ang Naka-highlight na gumawa id: e2225bb kasama ang HEAD pointer index: 4 ay ang isa kapag ‘ muling pagbebenta Ang sangay ay nilikha mula sa kasalukuyang pointer ng HEAD na tumuturo sa iyong pinakabagong gawain.

Hakbang 3 : Mabawi

Upang mabawi ang ‘Muling ibenta ‘Branch gamitin ang utosAng 'git checkout' na pumasa sa sanggunian ng HEAD pointer kasama ang index id - 4.Ito ang sanggunian ng pointer nang nilikha ang sangay na 'preprod' na mahabang id na idi-highlight sa output screenshot.

git checkout -b preprod HEAD @ {4}

Paglabas

At voila! ' muling pagbebenta Nakuha muli ang ‘branch sa lahat ng iyong source code.

TANDAAN : Hayaan mo ako bmuling makuha ang utos na 'git checkout' na ginamit sa itaas at matulungan kang maunawaan nang mas mabuti:

Ang 'git checkout' na utos ay isang over-load na utos (Tulad ng anumang pag-andar ng Java na labis na pag-andar). Ito ang bahagi kung saan nakuhang muli ang tunay na sangay.

Ang solong utos na ito ay unang sumusuri sa naunang kasaysayan ng timestamp na itinuro ng HEAD @ {4} pointer at pagkatapos ay lumilikha ng isang sangay na may pangalang 'preprod' gamit ang pagpipiliang '-b' pati na rin ilipat ang iyong gumaganang direktoryo sa bagong nilikha na sangay.

Ipinapahiwatig nito na ang sangay na lumipat ay mula sa 'master' hanggang sa 'preprod' tulad ng ipinahiwatig sa output screen.Maaari mo na ngayong pagsamahin ito sa 'master' o 'branch' na sangay ayon sa iyong modelo ng pagsasanga.

Ngayon, na alam mo kung paano ibalik ang isang sangay, hayaan mong sabihin ko sa iyo kung anong gawain ang naibalik kapag ang isang tinanggal na sangay ay nakuhang muli.

Anong gawain ang naibalik kapag na-recover ang natanggal na sangay?

Ang mga file na na-stash at na-save sa listahan ng stash index ay mababawi. Anumang mga hindi na-track na file ay mawawala. Gayundin, akot ay isang magandang ideya na laging entablado at gawin ang iyong trabaho o itago ang mga ito.

Upang makuha ang mga sanggunian sa pag-log ng isang partikular na sangay o tag patakbuhin ang utos - 'git reflog'.

Halimbawa: Upang suriin ang mga sanggunian sa pag-log ng sangay na 'uat' lamang gamitin ang utos - 'git reflog uat'.

Mga Sub-utos ng Git Reflog

go reflog

Utusan na buksan ang manu-manong pahina

$ git reflog --help

Paglabas

go reflog ipakita

Ipinapakita ang mga tala ng sanggunian na ibinigay sa linya ng utos.

git reflog show master @ {0}

go reflog mag-expire na

Ginagamit ang utos na ito upang putulin ang mas matandang mga entry sa reflog.

mag-expire ang git reflog

go reflog tanggalin

Ang utos na ito ay nagtatanggal ng solong mga entry mula sa kasaysayan ng reflog.

git reflog tanggalin

go reflog umiiral

Sinusuri ng utos na ito kung ang isang ref (sangay o tag) ay may isang reflog - mga tala sa kasaysayan ng pag-log.

mayroon nang git reflog

Bukod sa mga nabanggit na utos, Ang utos na 'Git Reflog' ay tumatagal ng iba't ibang mga subcommand, at iba't ibang mga pagpipilian depende sa mga subcommand na nabanggit sa itaas. Para sa karagdagang pagbasa patakbuhin ang ' git reflog –help ”Mula sa bintana ng terminal.

Sa pamamagitan nito, natapos namin ang artikulong ito sa Git Reflog.Ang hangarin ng DevOps ay upang lumikha ng mas mahusay na kalidad na software nang mas mabilis at may higit na pagiging maaasahan habang inaanyayahan ang higit na komunikasyon at pakikipagtulungan sa pagitan ng mga koponan. Kung naintriga ka sa artikulong ito, c ano ba ang 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 artikulong 'Git Reflog' at babalik kami sa iyo sa lalong madaling panahon.