Pobočka Git
Práce s pobočkami Git
V Gitu branch
je 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.html
strá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 branch
ná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
master
upřesňuje, že právě na tom jsme branch
.
checkout
je příkaz používaný k rezervaci branch
. Přesuneme nás z aktuálního
branch
do 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.jpg
nenítracked
K tomu tedy musíme přidat oba soubory do prostředí Staging Environment
branch
:
Příklad
git add --all
Použití --all
místo jednotlivých názvů souborů vytvoří všechny změněné (nové, upravené a smazané) soubory.
Zkontrolujte si status
z
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 -b
volby on checkout
vytvoří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.jpg
a 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.jpg
už 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.