Výukový program Git


Git a {{title}}


Git Contribute


Git Advanced


Git Undo




Sloučení větví Git


Sloučit pobočky

Nouzovou opravu máme připravenou, a tak pojďme sloučit hlavní větev a větev nouzových oprav.

Nejprve se musíme změnit na hlavní větev:

Příklad

git checkout master
Switched to branch 'master'

Nyní sloučíme aktuální větev (master) s nouzovou opravou:

Příklad

git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Vzhledem k tomu, že větev nouzových oprav pocházela přímo z mastera a během naší práce nebyly v masteru provedeny žádné další změny, Git to považuje za pokračování masteru. Takže to může "Fast-forward", prostě ukazuje jak hlavní, tak nouzovou opravu na stejné potvrzení.

Protože hlavní a nouzová oprava jsou nyní v podstatě stejné, můžeme nouzovou opravu odstranit, protože již není potřeba:

Příklad

git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).

Konflikt sloučení

Nyní se můžeme přesunout k obrázkům hello-world a pokračovat v práci. Přidejte další soubor obrázku (img_hello_git.jpg) a změňte index.html, aby se zobrazil:

Příklad

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

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>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

Nyní jsme zde s prací hotovi a můžeme připravit a zavázat se pro tuto větev:

Příklad

git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
 2 files changed, 1 insertion(+)
 create mode 100644 img_hello_git.jpg

Vidíme, že index.html byl změněn v obou větvích. Nyní jsme připraveni sloučit obrazy hello-world do master. Ale co se stane se změnami, které jsme nedávno provedli v masteru?

Příklad

git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Sloučení se nezdařilo, protože existuje konflikt mezi verzemi pro index.html. Pojďme zkontrolovat stav:

Příklad

git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   index.html

To potvrzuje, že došlo ke konfliktu v index.html, ale soubory obrázků jsou připraveny a připraveny k potvrzení.

Takže ten konflikt musíme vyřešit. Otevřete soubor v našem editoru:

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>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images

</body>
</html>

Můžeme vidět rozdíly mezi verzemi a upravit to, jak chceme:

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>This line is here to show how merging works.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

Nyní můžeme vytvořit index.html a zkontrolovat stav:

Příklad

git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg
        modified:   index.html

Konflikt byl opraven a k uzavření sloučení můžeme použít commit:

Příklad

git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts

A smažte větev hello-world-images:

Příklad

git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).

Nyní lépe rozumíte tomu, jak fungují větvení a slučování. Je čas začít pracovat se vzdáleným úložištěm!

Otestujte se pomocí cvičení

Cvičení:

Sloučit hello-youvětev s aktuální větví:

git  hello-you