Jaké jsou běžné chyby Git a jak je opravit?

Při verzování kódu v systémovém nástroji pro správu verzí git můžete vrátit zpět nejběžnější chyby a chránit integritu dat.

S rozmachem technologie, stane se nevyhnutelným pro každého IT pracovníka pracovat na více datech současně a vaše data se neustále vyvíjejí s časem. Je také nezbytné sledovat každou změnu v datech a být připraveni v případě potřeby vrátit nebo vrátit jakoukoli nežádoucí změnu.

Musím se přiznat, že verze mých dat v Gitu mi umožňují experimentovat s vývojem projektu. Pokud to pokazím, vím, že git má vždy způsob, jak vrátit a / nebo vrátit tuto verzi mého projektu do původní podoby před tím, než jsem to pokazil. Každý vrstva je navržena tak, aby umožnila zkontrolovat a upravit a / nebo opravit změny dat před přesunem dat v další fázi. V tomto blogu jsou tedy popsány chyby:





Un-stage soubory / adresáře z rejstříku

Při přidávání a / nebo úpravách souborů často používáte výchozí chování příkazu „git add“, kterým je přidání všech souborů a adresářů do rejstříku.Mnohokrát pocítíte potřebu zrušit určité soubory nebo je naposledy upravit před jejich spácháním.



Syntax: git reset


odstranit soubory z indexu - běžné chyby git -Edureka

Un-staging soubory z oblasti rejstříku vám dávají další šanci na přepracování vašich dat před potvrzením místního úložiště.



Upravte poslední potvrzenou zprávu

Příkaz: git commit --amend
Nejnovější zprávu o odevzdání můžete upravit, aniž byste vytvořili novou. Chcete-li vypsat protokoly potvrzení, nastavil jsem alias „hist“:
Příkaz: git config --global alias.hist 'log --pretty = formát: '% C (žlutá)% h% Creset% reklama | % C (zelená)% s% Creset% C (červená)% d% Creset% C (modrá) [% an] '--graph --decorate --date = short'x


Neměňte zprávu o potvrzení, která je již přenesena do vzdáleného úložiště a sdílena s ostatními, protože by to způsobilo neplatnost dřívější historie potvrzení, a tím by mohla být ovlivněna jakákoli práce na ní založená.

Zapomněl jsem na některé změny v posledním odevzdání

Řekněme, že jste zapomněli provést nějaké úpravy a svůj snímek jste již potvrdili, ale také nechcete provést další potvrzení, abyste zvýraznili svou chybu.
Příkaz: git commit --amend


Zdůraznil jsem, jak bylo znovu vytvořeno a změněno ID sha-1 objektu nedávného odevzdání. Předstíral jsem, že jsem provedl jediný závazek spojením obou změn do jedné.

Zahodit místní změny

Tady je případ, kdy jsem upravil soubor „README“ a připravil ho. Dále jsem stejný soubor upravil podruhé, ale uvědomil jsem si, že druhou změnu nechci.

Teď mi dovolte nevrátit celou změnu ručně, můžu jednoduše vytáhnout postupnou verzi souboru.
Syntax:
pokladna git -–Místní změny v souboru
pokladna git -–Místní změny ve všech souborech v adresáři & shy & shy

jak třídit pole c ++

Příkaz: pokladna git - PŘEČTĚTE SI

Zahodil jsem tedy poslední změny souboru a přijal jsem připravenou verzi souboru. V příštím potvrzení se do místního úložiště dostane pouze připravená verze souboru.

Potvrzené osobní údaje do místního úložiště

Chci odstranit určitá data z místního úložiště, ale ponechat soubory v pracovním adresáři.
Syntax:
git reset --mixovaná HLAVA ~
git reset - smíšený

Příkaz: git reset - smíšená HLAVA ~ 1
HEAD ~ 1 označuje potvrzení těsně před nedávným potvrzením, které ukazuje aktuální větev HEAD.

Soubory v aktuálním snímku byly odstraněny z místního úložiště i pracovní oblasti. Přidejte následující vzory do globálního souboru .gitignore, abyste je vyloučili ze sledování pomocí git.
vim ~ / .gitignore_global
# soubory hesla #
*.složit
*.klíč
*. passwd

Tímto způsobem se odebere potvrzení, které mělo snímek souborů hesel, a získáte čistou pracovní oblast. Moje soubory jsou stále přítomny v mém pracovním adresáři, ale již nejsou přítomny v místním úložišti, nebudou také odeslány na vzdálené úložiště.

Pozor: Pokud je ztratíte, git je nemůže za vás obnovit, protože o tom neví.

Nahraďte nejnovější potvrzení novým potvrzením

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

Možnost „–soft“ pouze odebere potvrzené soubory z místního úložiště, zatímco jsou stále v indexu, a po kontrole je můžete znovu potvrdit. je sha-1 snímku, který chcete odebrat z místního úložiště. kde n je počet potvrzení před potvrzením HEAD

Příkaz :git reset --soft HEAD ~ 1


Upravte soubory a znovu je připravte

Příkaz: git commit -m 'Přidání index.html a style.css'
Vaše historie odevzdání se nyní ukazuje být:

Spáchal nesprávná data

Syntax:
git reset --hard HEAD ~ n–Resetujte projekt na „n“ potvrzení před posledním potvrzeným snímkem
git reset --hard–Resetujte projekt na daný snímek ID potvrzení

Příkaz: git reset --hard HEAD ~ 1


Poslední potvrzení a poškozené soubory jsou odstraněny z místního úložiště, pracovní oblasti i pracovního adresáře.

Pozor: Je to nebezpečný příkaz, protože nakonec ztratíte soubory v pracovním adresáři. Nedoporučuje se na vzdáleně sdíleném úložišti.

Vraťte se do mého starého stavu projektu

Můžete přejít na starší stav svého projektu v historii času. Pokud se pokazíte v nejnovější verzi nebo potřebujete vylepšení ve starším kódu, možná budete chtít vytvořit další větev ze starého snímku projektu, aby nebránila vaší aktuální práci. Podívejme se, jak:
A. Vypište historii projektu a rozhodněte se pro starší ID potvrzení, příkaz:jdi hist
b. Vytvořte další větev z ID potvrzení:git checkout -b starý stav e7aa9a5
C. Pokračujte v práci na kódu a později sloučte / změňte rebase pomocí větve „master“.

Obnovte odstraněnou místní větev

Je možné regenerovat ztracenou práci na referenční větvi. Řekněme, že jsem odstranil větev ‚old_code ', aniž bych se spojil s hlavní větví, a ztratil jsem práci. A ne, ani jsem netlačil větev do vzdáleného úložiště, co potom? Dobře, sledujte git a zaznamenávejte do deníku všechny změny provedené u každé reference, podívejme se na moje:jít reflog

HEAD @ {2} je tedy ukazatel, když jsem se přesunul do větve „old_code“, pojďme to obnovit:

Syntax:pokladna git -b
Příkaz:git checkout -b old_code HEAD @ {2}

V době svého vzniku musíte být nyní ve větvi 'old_code' se svou nejnovější prací. Ukazatel 'reflog' na HEAD @ {1} byl navíc nedávným potvrzením provedeným ve větvi 'old_code'. Chcete-li obnovit tento jedinečný spáchat stačí spustit příkaz jako:git reset --hard HEAD @ {1}.Tím se také obnoví upravené soubory v pracovním adresáři.

Pokud byste chtěli vědět podrobně, jak tento příkaz funguje a jak můžete spravovat položky „reflog“, můžete si také přečíst můj dřívější příspěvek naobnovení odstraněné větve z git reflog.

Vrátit zpět změny provedené při odevzdání

jítvrátit sese používá k záznamu některých nových revizí, aby se zvrátil účinek některých dřívějších revizí.
Syntax: git vrátit
Z mých záznamů o revizích bych chtěl zvrátit změnu provedenou ve zvýrazněném ID potvrzení:

Příkaz: git revert 827bc0d

Je lepší, abyste nenastavili „- tvrdé“ sdílené závazky, ale místo toho je „vrátili zpět“, aby uchovali historii, aby bylo pro všechny snazší vystopovat protokoly historie a zjistit, co bylo vráceno, kým a proč?

Můžete použít stejnou logiku odkazování na revize týkající se ukazatele HEAD namísto zadání ID potvrzení, jako v HEAD ~ 3 nebo HEAD ~ 4 a tak dále.

Dejte své pobočce špatné jméno

Název místní pobočky můžete přejmenovat. Mnohokrát se stane, že budete chtít přejmenovat svoji pobočku na základě problému, na kterém pracujete, aniž byste museli procházet bolestí při migraci celé své práce z jednoho místa na druhé. Můžete například být ve stejné větvi nebo jiné větvi a stále můžete přejmenovat požadovanou větev, jak je znázorněno níže:
Syntax: git větev -m
Příkaz: git branch -m old_code old_ # 4920

Jak se možná divíte, git sleduje toto přejmenování? Ano, odkazuje na vaše záznamy „reflog“, tady je moje:

Přejmenování pobočky nebude mít vliv na její pobočku vzdáleného sledování. Ve vzdálené části uvidíme, jak nahradit větev ve vzdáleném úložišti

Před přesunutím do vzdáleného režimu znovu uspořádejte protokoly historie

Jak bych si přál, abych udělal určité závazky dříve než ostatní a vůbec bych neudělal nějaké závazky. Interaktivně znovu uspořádejte a upravte staré závazky, abyste efektivně opravili nebo vylepšili kód
Syntax: git rebase -i
Příkaz: git rebase -i fb0a90e–Start rebasing na závazky, které byly provedeny po commit-id fb0a90e

Znovu navštivte git rebase dokumentace k pochopení toho, jak se „-interaktivní nebo -i“ rebase liší od běžné rebase.

Potvrzené nesouvisející změny do jednoho potvrzení

V takovém případě musíte rozdělit starý pohřben na více logických potvrzení.
Syntax: git rebase -i
Příkaz: git rebase -i fb0a90e
V editoru rebase musíte zvolit ID potvrzení e7aa9a5 a změnit jej na „upravit“ místo na „vybrat“.

nesouvisející změny - běžné chyby git -Edureka

Nyní byste se nacházeli ve verzi projektu commit id-e7aa9a5. Nejprve resetujte historii revizí a pracovní plochu na předchozí revizní příkaz:git reset HEAD ~ 1
Za druhé, upravte + fáze + odevzdejte soubory jednotlivě
Příkazy:
git přidat kód && git commit -m 'Přidání počátečních kódů'
git přidat nový kód && git commit -m 'Přidání nového kódu'

Za třetí, pokračujte v rebase a skončete.

Příkaz :git rebase - pokračovat
Za čtvrté, prohlédněte si historii s dalšími závazky.

Příkaz: jdi hist

rozdělení revize na více pomocí rebase - běžné chyby git - Edureka

Změňte autorský e-mail ve všech závazcích na všech pobočkách

Již dlouhou dobu vytvářím verze a potvrzuji své soubory projektu v git, ale až dosud mě nikdy nepřekvapilo, že moje e-mailová adresa byla ohrožena v mých protokolech historie potvrzení, které jsou dokonce publikovány na vzdálených úložištích. To se může každému stát, když zpočátku nastavujete konfigurace v souboru „.gitconfig“. K mé úlevě může git přepsat proměnné prostředí, které poskytujeme při vytváření objektu potvrzení.

Nejprve dostanu seznam e-mailová ID rozhodnout o těch, které chci změnit:
Příkaz: git log --all --pretty = formát: '% an% d'–Tiskne jméno autora (refname / branch-name)

Za druhé, proběhnu každý závazek na každé větvi a znovu napište objekt potvrzení s novým e-mailovým ID
Příkaz:
git filter-branch --env-filter '
if ['$ GIT_AUTHOR_NAME' = 'divya']
pak
GIT_AUTHOR_EMAIL = 'divya@github.com'
být
' -- --Všechno

Ztracené a nalezené soubory

Předpokládejme, že jste ztratili určitý soubor a nepamatujete si jeho název, ale můžete si vybavit některá slova v souboru. V takovém případě můžete postupovat podle těchto kroků -
Krok 1: Seznam všech závazků, které kdy obsahovaly snímek souboru, s hledaným vzorem
Příkaz :git rev-list - vše | xargs git grep -i 'timestamp'



Krok 2 : Vytvořte novou větev ‚lost-found 'z tohoto zvýrazněného commit-id
Syntax: git checkout -b ztraceno-nalezeno d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Zapomněl jsem, která větev má moje potvrzení

Občas, když zjistíte ID buggy commit, možná budete chtít znát všechny větve, které mají tento commit na nich, abyste je mohli všechny opravit. Zkontrolovat historii každé pobočky není ve velkém projektu s více pobočkami příliš praktické.

Špatný závazek provedený v mé aplikaci navigační budovy jednou porušil kód, a to když jsem použil Příkaz „git bisect“ k detekci chybného ID potvrzení následovanýpříkaz:git větev - obsahujevypsat větve se špatným spácháním.

Takže teď znám všechny větve, které mají stále špatné potvrzení, mohl jsem tuto sadu změn vrátit nebo resetovat.

Odstranit potvrzení z historie

Někdy cítím potřebu prostě vymazat závazek z historie a nezanechat po něm žádnou stopu. Nedoporučoval bych vám vyzkoušet tento trik na sdílené větvi, ale pouze na místní pobočce.
Syntax: git rebase -i
Příkaz :git rebase -i 93859d8
V editoru rebase-> nahraďte „edit“ za „drop“ pro zvýrazněné ID potvrzení: 69f4813

V některých případech může toto přepsání vést ke konfliktům. Musíte vyřešit konflikty a pak pokračovat dále.

Varování : Toto je nebezpečný příkaz, protože přepisuje historii a může dojít ke ztrátě dat. Taková větev se liší od vzdáleného protějšku a bude muset být tlačena pomocí--platnostnebo- síla-s-leasingemvolba.

Do dálkového ovladače byla odeslána špatná větev

Tady je to, co chci udělat - chci smazat a vzdálená větev a také ji přestat sledovat z mé místní pobočky. “git push„Příkaz při použití s--vymazatvolba odstraní vzdálenou větev Takže takto dostanu lokální kopii klonovaného projektu -

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


Jakmile je vzdálená větev odstraněna, ostatní ve sdíleném repo musí aktualizovat a aktualizovat své vzdálené odkazy pomocí--prořezávatmožnost odstranit chybějící odkazy na objekty:git fetch --prune -v původ

V tomto příspěvku jsem zmínil některé běžné chyby nebo změny, které vám git může pomoci opravit. Každý kód je jedinečný a vyvinutý svým způsobem, takže existují také různé způsoby přístupu a řešení problému. Vždy se můžete obrátit na úředníka dokumentace git abyste pochopili, jak různé příkazy git chrání váš zdrojový kód a jak je co nejlépe využít.

Nyní, když jste pochopili běžné chyby Git, podívejte se na toto Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Kurz Certifikace Edureka DevOps pomáhá studentům pochopit, co je DevOps, a získat odborné znalosti v různých procesech a nástrojích DevOps, jako jsou Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack a GIT pro automatizaci více kroků v SDLC.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů k těmto „běžným chybám Gitu“ a my se vám ozveme