Tento článok prepája tri témy, s ktorými sa stretnete, keď už ovládate základný cyklus práce s Gitom: ako vytvoriť repozitár (pomocou git init alebo v IDE), čím sa rebase líši od merge a ako správne odstrániť tajný údaj, ktorý sa náhodou dostal do histórie. Všetky tri témy sa vám zídu aj pri práci s Claude Code - tieto operácie vykonáva príkazmi a je dôležité, aby ste rozumeli, čo sa za nimi skrýva.

Príklady a snímky rozhrania pochádzajú z IDE JetBrains; názvy a umiestnenie akcií sa vo vašej verzii môžu líšiť. Na cvičenia použite samostatný cvičný repozitár. V pracovnom projekte dodržiavajte jeho pravidlá pre vetvy, commity a odosielanie zmien.

Vytvorenie repozitára - git init a v IDE

Ak už máte projekt na GitHube, môžete ho naklonovať. Iný prípad nastane, keď máte lokálny priečinok s kódom. git init v ňom vytvorí interné údaje Gitu, ale nie prvý commit. Nasledujúci príklad predpokladá, že README.md a .gitignore už existujú a sú skontrolované; ostatné potrebné súbory pridáte osobitne.

git init
git status
# po kontrole README a pravidiel ignorovania
git add README.md .gitignore
git diff --cached
git commit -m "Initial commit"

Ak chcete lokálny repozitár vytvoriť v IDE, použite akciu na vytvorenie Git repozitára alebo zapnutie správy verzií. Share Project on GitHub je samostatný postup: vytvorí aj vzdialený repozitár a ponúkne odoslanie zmien. Pred odoslaním skontrolujte vybrané súbory, históriu a viditeľnosť.

Public alebo private

Pri vytváraní repozitára si vyberáte, kto ho uvidí:

  • public - repozitár je viditeľný všetkým na internete a jeho kód si môže pozrieť ktokoľvek. Hodí sa do portfólia a pre open source;
  • private - prístup máte len vy a ľudia, ktorých pozvete. Pri pracovnom a výukovom kóde, ktorý nemá byť verejný, je to predvolená voľba.

Viditeľnosť nie je nemenná, neskôr ju môžete zmeniť v nastaveniach repozitára na GitHube.

Súvis s Claude Code

Claude Code môže spustiť git init a pripraviť za vás prvý commit. Ak na GitHube ešte nemáte repozitár, môže ho vytvoriť cez GitHub CLI (gh repo create) - a vy rozhodnete, či bude public alebo private.

rebase vs merge - aký je rozdiel

merge aj rebase riešia rovnakú úlohu - preniesť prácu z jednej vetvy do druhej. Každý to však robí inak a od toho závisí, ako bude vyzerať história projektu.

merge spája histórie. Ak sa ich cesty rozišli, zvyčajne vznikne merge commit s dvoma rodičmi. Ak je aktuálna vetva predkom druhej, Git môže vykonať fast-forward bez nového commitu. Diagram nižšie ukazuje práve vetvy, ktorých cesty sa rozišli.

Horná línia je main, dolná feature. Po zlúčení ukazuje main na M, ktorý má dvoch rodičov: E a D.ABEMCD
Horná línia je main, dolná feature. Po zlúčení ukazuje main na M, ktorý má dvoch rodičov: E a D.

merge zachová obe línie a pridá merge commit - z histórie je jasné, že existovala samostatná vetva feature.

rebase presunie vaše commity tak, akoby ste začali pracovať od aktuálneho konca cieľovej vetvy. História bude lineárna, ako jedna priama reťaz. Má to však svoju cenu: rebase prepisuje vaše commity - namiesto pôvodných vzniknú nové s inými hashmi.

Vetva main ukazuje na E a vetva feature po rebase na nový D2. Spoločná história pred B nie je zobrazená.BEC2D2
Vetva main ukazuje na E a vetva feature po rebase na nový D2. Spoločná história pred B nie je zobrazená.

Po rebase commity C a D vyzerajú, akoby vznikli nad E: história je lineárna, no teraz ide o nové commity (C2, D2) s inými hashmi.

Čo si vybrať:

  • merge - keď chcete zachovať skutočný priebeh histórie alebo pracujete so spoločnou vetvou. Bezpečná predvolená voľba;
  • rebase - ak si chcete pred pull requestom upratať vlastnú vetvu: lineárna história sa číta ľahšie.
Upozornenie

Kým sa učíte pracovať s rebase, používajte ho na vlastnej nezverejnenej vetve. Vetvu, ktorú už používajú aj ostatní, prepisujte len podľa dohodnutého postupu - inak kolegom zostane pôvodná história. Ak si nie ste istí dôsledkami, zastavte sa a overte si pravidlá projektu.

Upozornenie

Spôsob zlúčenia určujú zadanie a pravidlá projektu. Nespoliehajte sa na predvolenú voľbu agenta - pred vykonaním ho požiadajte, aby pomenoval cieľovú vetvu, operáciu a jej dôsledky pre históriu.

Odstránenie tajných údajov z repozitára

Odstránením súboru v novom commite sa tajný údaj neodstráni zo starších commitov. Ak sa k heslu alebo tokenu mohli dostať iní, najprv ho zneplatnite alebo vymeňte v službe, ktorá ho vydala. Vyčistenie histórie neodstráni kópie, ktoré už niekto vytvoril.

Upozornenie

Vyčistenie zdieľanej histórie nepovažujte za bežnú opravu súboru. Mení identifikátory commitov a vyžaduje koordináciu: zastavte odosielanie starých vetiev, určte všetky dotknuté cesty, skontrolujte výsledok v samostatnej kópii a dohodnite sa s kolegami na aktualizácii ich kópií.

Na vyčistenie histórie GitHub opisuje postup s git-filter-repo. Konkrétne príkazy závisia od toho, či odstraňujete celý súbor alebo nahrádzate tajný reťazec, kde sa nachádzal a kam sa história dostala. Postupujte podľa oficiálneho návodu na odstránenie citlivých údajov, vrátane čerstvej kópie, kontroly výsledku, aktualizácie vzdialených referencií a pokynov pre kolegov.

Samotné vyčistenie lokálnej kópie nemení server. Vynútené odoslanie prepísanej histórie je samostatný krok, na ktorom sa treba dohodnúť; univerzálny príkaz pre všetky vetvy tu spúšťať netreba. Kópie v cudzích klonoch a forkoch nemáte pod kontrolou. Pre odkazy a cache, ktoré GitHub stále sprístupňuje, platia podmienky kontaktovania podpory uvedené v tom istom návode.

Ako znížiť riziko, že sa to zopakuje:

  • uchovávajte tajné hodnoty mimo kódu, napríklad v premenných prostredia;
  • pridávajte lokálne súbory, napríklad .env, do .gitignore ešte predtým, než ich Git začne sledovať;
  • pred commitom kontrolujte vybrané súbory aj git diff --cached;
  • ak sú v repozitári dostupné secret scanning a push protection, zapnite ich ako ďalšiu kontrolu. Neodhalia však všetky možné tajné údaje.
Upozornenie

Agent vám môže pomôcť nájsť dotknuté cesty a pripraviť plán vyčistenia. Neposielajte mu do chatu platný tajný údaj, aby ho hľadal. Najprv zneplatnite prístup a potom sa dohodnite na práci s históriou.

Ako to funguje s Claude Code

Na všetky tri témy narazíte, keď s repozitárom pracuje Claude Code. Na čo sa zamerať:

  • môže inicializovať repozitár (git init) a pripraviť prvý commit - pri vytváraní na GitHube si sami vyberáte public alebo private;
  • navrhuje spôsob zlúčenia podľa pravidiel projektu; pred spustením skontrolujte dôsledky merge a rebase;
  • vidí súbory, ktoré sa dostanú do commitu, no za to, aby sa doň nedostal tajný údaj, zodpovedáte napokon vy.
Upozornenie

Pred commitom skontrolujte zoznam súborov aj ich obsah v diff. Tajný údaj sa môže nachádzať v bežnom zdrojovom súbore, nielen v .env. Ak sa už dostal do histórie, najprv ho vymeňte a potom zvážte, či treba históriu vyčistiť.

Predchádzajúci článok: Vrátenie a obnova zmien v Gite