Výukový program Git


Git a {{title}}


Git Contribute


Git Advanced


Git Undo




Pobočka Git


Práce s pobočkami Git

V Gitu branchje a nová/samostatná verze hlavního úložiště.

Řekněme, že máte velký projekt a potřebujete aktualizovat jeho návrh.

Jak by to fungovalo bez a s Git:

Bez Gitu:

  • Vytvořte kopie všech relevantních souborů, abyste se vyhnuli dopadu na živou verzi
  • Začněte pracovat s návrhem a zjistěte, že kód závisí na kódu v jiných souborech, které je také třeba změnit!
  • Vytvořte také kopie závislých souborů. Ujistěte se, že každá závislost souboru odkazuje na správný název souboru
  • NOUZOVÝ! Někde jinde v projektu je nesouvisející chyba, kterou je třeba co nejdříve opravit!
  • Uložte všechny soubory a poznamenejte si názvy kopií, na kterých jste pracovali
  • Pracujte na nesouvisející chybě a aktualizujte kód, abyste ji opravili
  • Vraťte se k návrhu a dokončete práci tam
  • Zkopírujte kód nebo přejmenujte soubory, aby byl aktualizovaný design na živé verzi
  • (o dva týdny později si uvědomíte, že nesouvisející chyba nebyla v nové verzi návrhu opravena, protože jste před opravou zkopírovali soubory)

S Git:

  • S novou větví nazvanou new-design upravte kód přímo bez dopadu na hlavní větev
  • NOUZOVÝ! Někde jinde v projektu je nesouvisející chyba, kterou je třeba co nejdříve opravit!
  • Vytvořte novou větev z hlavního projektu s názvem small-error-fix
  • Opravte nesouvisející chybu a sloučte větev opravy malých chyb s hlavní větví
  • Vrátíte se do pobočky nového designu a dokončíte práci tam
  • Sloučit větev nového designu s hlavní (upozornění na malou opravu chyby, kterou jste postrádali)

Větve vám umožňují pracovat na různých částech projektu bez dopadu na hlavní větev.

Po dokončení práce lze větev sloučit s hlavním projektem.

Můžete dokonce přepínat mezi větvemi a pracovat na různých projektech, aniž by se navzájem rušily.

Větvení v Gitu je velmi lehké a rychlé!


Nová pobočka Git

Přidejte na naši index.htmlstránku nějaké nové funkce.

Pracujeme v našem místním úložišti a nechceme narušit nebo případně zničit hlavní projekt.

Vytvoříme tedy nový branch:

Příklad

git branch hello-world-images

Nyní jsme vytvořili nový s branchnázvem „ hello-world-images

Potvrdíme, že jsme vytvořili nový branch:

Příklad

git branch
  hello-world-images
* master

Můžeme vidět novou větev s názvem "hello-world-images", ale *vedle masterupřesňuje, že právě na tom jsme branch.

checkoutje příkaz používaný k rezervaci branch. Přesuneme nás z aktuálního branchdo zadaného na konci příkazu:

Příklad

git checkout hello-world-images
Switched to branch 'hello-world-images'

Nyní jsme přesunuli náš současný pracovní prostor z hlavní větve do nové branch

Otevřete svůj oblíbený editor a proveďte nějaké změny.

V tomto příkladu jsme do pracovní složky přidali obrázek (img_hello_world.jpg) a do souboru řádek kódu index.html:

Příklad

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>

</body>
</html>

Provedli jsme změny v souboru a přidali nový soubor do pracovního adresáře (stejný adresář jako main branch).

Nyní zkontrolujte stav aktuálního branch:

Příklad

git status
On branch hello-world-images
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        img_hello_world.jpg

no changes added to commit (use "git add" and/or "git commit -a")

Pojďme si tedy projít, co se zde děje:

  • Došlo ke změnám v našem index.html, ale soubor není připraven pro commit
  • img_hello_world.jpgnení tracked

K tomu tedy musíme přidat oba soubory do prostředí Staging Environment branch:

Příklad

git add --all

Použití --allmísto jednotlivých názvů souborů vytvoří všechny změněné (nové, upravené a smazané) soubory.

Zkontrolujte si statusz branch:

Příklad

git status
On branch hello-world-images
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file: img_hello_world.jpg
    modified: index.html

Jsme spokojeni s našimi změnami. Zavážeme je tedy k branch:

Příklad

git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg

Nyní máme nový branch, který se liší od předlohy branch.

Poznámka: Použitím -bvolby on checkoutvytvoříte novou větev a přesunete se do ní, pokud neexistuje



Přepínání mezi větvemi

Nyní se podívejme, jak rychle a snadno lze pracovat s různými větvemi a jak dobře to funguje.

Momentálně jsme na pobočce hello-world-images. Do této větve jsme přidali obrázek, takže uveďme seznam souborů v aktuálním adresáři:

Příklad

ls
README.md  bluestyle.css  img_hello_world.jpg  index.html

Můžeme vidět nový soubor img_hello_world.jpga pokud otevřeme soubor html, můžeme vidět, že kód byl změněn. Vše je jak má být.

Nyní se podívejme, co se stane, když změníme větev namaster

Příklad

git checkout master
Switched to branch 'master'

Nový obrázek není součástí této větve. Znovu vypište soubory v aktuálním adresáři:

Příklad

ls
README.md  bluestyle.css  index.html

img_hello_world.jpguž tam není! A pokud otevřeme soubor html, můžeme vidět, že se kód vrátil do stavu, v jakém byl před změnou.

Vidíte, jak snadná je práce s větvemi? A jak vám to umožňuje pracovat na různých věcech?


Pohotovostní pobočka

Nyní si představte, že jsme ještě neskončili s obrázky hello-world, ale potřebujeme opravit chybu na masteru.

Nechci si zahrávat přímo s mistrem a nechci si zahrávat s obrázky hello-world, protože to ještě není hotové.

Takže vytváříme novou pobočku, která se bude zabývat nouzovými situacemi:

Příklad

git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'

Nyní jsme vytvořili novou větev z master a změnili jsme ji. Chybu můžeme bezpečně opravit, aniž bychom rušili ostatní větve.

Opravme naši imaginární chybu:

Příklad

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>

</body>
</html>

V tomto souboru jsme provedli změny a potřebujeme tyto změny dostat do hlavní větve.

Zkontrolujte stav:

Příklad

git status
On branch emergency-fix
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

uspořádejte soubor a potvrďte:

Příklad

git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
 1 file changed, 1 insertion(+), 1 deletion(-)

Nyní máme opravu připravenou pro master a potřebujeme sloučit dvě větve.

Otestujte se pomocí cvičení

Cvičení:

Vytvořte novou větev s názvem hello-world-images:

git