Tutoriel Git


Git et {{title}}


Contribuer à Git


Git Avancé


Git Annuler




Fusion de branches Git


Fusionner les branches

Nous avons le correctif d'urgence prêt, alors fusionnons les branches master et emergency-fix.

Tout d'abord, nous devons passer à la branche master :

Exemple

git checkout master
Switched to branch 'master'

Maintenant, nous fusionnons la branche actuelle (maître) avec le correctif d'urgence :

Exemple

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

Étant donné que la branche de correction d'urgence provenait directement de master et qu'aucune autre modification n'avait été apportée à master pendant que nous travaillions, Git considère cela comme une continuation de master. Ainsi, il peut "avancer rapidement", en pointant simplement le maître et le correctif d'urgence vers le même commit.

Comme le master et le correctif d'urgence sont essentiellement les mêmes maintenant, nous pouvons supprimer le correctif d'urgence, car il n'est plus nécessaire :

Exemple

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

Conflit de fusion

Maintenant, nous pouvons passer à hello-world-images et continuer à travailler. Ajoutez un autre fichier image (img_hello_git.jpg) et modifiez index.html pour qu'il s'affiche :

Exemple

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

Exemple

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

Maintenant, nous avons terminé notre travail ici et pouvons organiser et valider pour cette branche :

Exemple

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

Nous voyons que index.html a été modifié dans les deux branches. Nous sommes maintenant prêts à fusionner hello-world-images dans master. Mais qu'adviendra-t-il des changements que nous avons récemment apportés à master ?

Exemple

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.

La fusion a échoué, car il existe un conflit entre les versions de index.html. Vérifions l'état :

Exemple

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

Cela confirme qu'il y a un conflit dans index.html, mais les fichiers image sont prêts et mis en scène pour être validés.

Nous devons donc résoudre ce conflit. Ouvrez le fichier dans notre éditeur :

Exemple

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

Nous pouvons voir les différences entre les versions et les modifier comme nous le souhaitons :

Exemple

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

Nous pouvons maintenant mettre en scène index.html et vérifier l'état :

Exemple

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

Le conflit a été corrigé et nous pouvons utiliser commit pour conclure la fusion :

Exemple

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

Et supprimez la branche hello-world-images :

Exemple

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

Vous avez maintenant une meilleure compréhension du fonctionnement des branches et de la fusion. Il est temps de commencer à travailler avec un référentiel distant !

Testez-vous avec des exercices

Exercer:

Fusionnez la hello-youbranche avec la branche actuelle :

git  hello-you