Git- zelfstudie


Git en {{title}}


Git Bijdragen


Git Geavanceerd


Git ongedaan maken




Git Branch Merge


Takken samenvoegen

We hebben de emergency fix klaar, dus laten we de master en emergency-fix branches samenvoegen.

Eerst moeten we naar de master -branch gaan:

Voorbeeld

git checkout master
Switched to branch 'master'

Nu mergen we de huidige branch (master) met emergency-fix:

Voorbeeld

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

Aangezien de emergency-fix branch rechtstreeks van master kwam, en er geen andere wijzigingen aan master waren aangebracht terwijl we aan het werk waren, ziet Git dit als een voortzetting van master. Het kan dus "Fast-forward" door zowel de master als de emergency-fix naar dezelfde commit te verwijzen.

Omdat master en emergency-fix nu in wezen hetzelfde zijn, kunnen we emergency-fix verwijderen, omdat het niet langer nodig is:

Voorbeeld

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

Samenvoegconflict

Nu kunnen we overgaan naar hello-world-images en blijven werken. Voeg nog een afbeeldingsbestand toe (img_hello_git.jpg) en verander index.html, zodat het het laat zien:

Voorbeeld

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

Voorbeeld

<!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>

Nu zijn we klaar met ons werk hier en kunnen we stagen en committen voor deze branch:

Voorbeeld

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

We zien dat index.html in beide branches is gewijzigd. Nu zijn we klaar om hello-world-images samen te voegen tot master. Maar wat gebeurt er met de wijzigingen die we onlangs in master hebben aangebracht?

Voorbeeld

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.

Het samenvoegen is mislukt, omdat er een conflict is tussen de versies voor index.html. Laten we de status controleren:

Voorbeeld

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

Dit bevestigt dat er een conflict is in index.html, maar de afbeeldingsbestanden zijn klaar en klaar om te worden vastgelegd.

Dus we moeten dat conflict oplossen. Open het bestand in onze editor:

Voorbeeld

<!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>

We kunnen de verschillen tussen de versies zien en bewerken zoals we willen:

Voorbeeld

<!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>

Nu kunnen we index.html stagen en de status controleren:

Voorbeeld

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

Het conflict is opgelost en we kunnen commit gebruiken om de samenvoeging af te sluiten:

Voorbeeld

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

En verwijder de tak hello-world-images:

Voorbeeld

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

Nu heb je een beter begrip van hoe branches en mergen werken. Tijd om aan de slag te gaan met een remote repository!

Test jezelf met oefeningen

Oefening:

Voeg de hello-youbranch samen met de huidige branch:

git  hello-you