Gestion des branches Git
Presque tous les systèmes de contrôle de version prennent en charge le branchement sous une forme ou une autre. L'utilisation de branches signifie que vous pouvez vous éloigner de la ligne principale de développement et continuer à travailler sans affecter la ligne principale.
Certaines personnes qualifient le modèle de branchement de Git de « fonctionnalité nirvana », et c'est précisément grâce à cela qu'il distingue Git de la famille des systèmes de contrôle de version.
Commande Créer une branche :
git branch (branchname)
Commande Changer de branche :
git checkout (branchname)
Lorsque vous changez de branche, Git remplacera votre répertoire de travail par le dernier instantané validé du contenu de la branche, donc plusieurs branches ne nécessitent pas plusieurs répertoires.
Commande de fusion de branche :
git merge
Vous pouvez fusionner plusieurs fois avec la même branche, ou vous pouvez choisir de supprimer la branche fusionnée directement après la fusion.
Gestion des branches Git
Liste des branches
Commande de base pour lister les branches :
git branch
Sans paramètres, git branch listera votre branche localement.
$ git branch * master
Ce que cet exemple signifie, c'est que nous avons une branche appelée "master", et cette branche est la branche actuelle.
Lorsque vous exécutez git init, Git créera la branche "master" pour vous par défaut.
Si nous voulons créer manuellement une branche et y basculer. Exécutez simplement la branche git (nom de la branche).
$ git branch testing $ git branch * master testing
Maintenant, nous pouvons voir qu'il y a une nouvelle branche testing.
Lorsque vous créez une nouvelle branche après le dernier commit de mise à jour de cette manière, s'il y a un commit de mise à jour plus tard, et que vous passez ensuite à la branche "testing", Git restaurera votre répertoire de travail au moment où vous créé la branche.
Ensuite, nous montrerons comment changer de branche. Nous utilisons git checkout (branch) pour basculer vers la branche que nous voulons modifier.
$ ls README $ echo 'w3cschool.cc' > test.txt $ git add . $ git commit -m 'add test.txt' [master 048598f] add test.txt 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 hello.php create mode 100644 test.txt $ ls README test.txt $ git checkout testing Switched to branch 'testing' $ ls README hello.php
Lorsque nous sommes passés à la branche "testing", le nouveau fichier test.txt que nous avons ajouté a été supprimé et le fichier hello.php initialement supprimé est réapparu. En revenant sur la branche "master", ils réapparurent.
$ git checkout master Switched to branch 'master' $ ls README test.txt
Nous pouvons également utiliser la commande git checkout -b (branchname) pour créer une nouvelle branche et basculer immédiatement vers cette branche pour opérer dans cette branche.
$ git checkout -b newtest Switched to a new branch 'newtest' $ git rm test2.txt rm 'test2.txt' $ ls README test.txt $ git commit -am 'removed test2.txt' [newtest 556f0a0] removed test2.txt 1 file changed, 1 deletion(-) delete mode 100644 test2.txt $ git checkout master Switched to branch 'master' $ ls README test.txt test2.txt
Comme vous pouvez le voir, nous avons créé une branche, supprimé certains fichiers dans le contexte de cette branche, puis sommes revenus à notre branche principale et ces fichiers sont de retour.
Utilisez des branches pour séparer le travail, ce qui nous permet de faire les choses dans différents contextes et de basculer d'un côté à l'autre.
Supprimer la branche
Commande Supprimer la branche :
git branch -d (branchname)
Par exemple, nous souhaitons supprimer la branche "testing" :
$ git branch * master testing $ git branch -d testing Deleted branch testing (was 85fc7e7). $ git branch * master
Fusion de branches
Une fois qu'une branche a du contenu indépendant, vous souhaiterez éventuellement la fusionner à nouveau dans votre branche principale. Vous pouvez utiliser la commande suivante pour fusionner n'importe quelle branche dans la branche actuelle :
git merge
$ git branch * master newtest $ ls README test.txt test2.txt $ git merge newtest Updating 2e082b7..556f0a0 Fast-forward test2.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test2.txt $ ls README test.txt
Dans l'exemple ci-dessus, nous avons fusionné la branche newtest dans la branche principale et le fichier test2.txt a été supprimé.
Conflits de fusion
La fusion n'est pas qu'une simple opération d'ajout et de suppression de fichiers, Git fusionnera également les modifications.
$ git branch * master $ cat test.txt w3cschool.cc
Tout d'abord, nous créons une branche appelée "change_site", y passons et modifions le contenu en www.w3cschool.cc.
$ git checkout -b change_site Switched to a new branch 'change_site' $ vim test.txt $ head -1 test.txt www.w3cschool.cc $ git commit -am 'changed the site' [change_site d7e7346] changed the site 1 file changed, 1 insertion(+), 1 deletion(-)
Soumettez le contenu modifié à la branche "change_site". Maintenant, si nous revenons à la branche "master", nous pouvons voir que le contenu est restauré tel qu'il était avant que nous le modifiions, et nous modifions à nouveau le fichier test.txt.
$ git checkout master Switched to branch 'master' $ head -1 test.txt w3cschool.cc $ vim test.txt $ cat test.txt w3cschool.cc 新增加一行 $ git diff diff --git a/test.txt b/test.txt index 704cce7..f84c2a4 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ w3cschool.cc +新增加一行 $ git commit -am '新增加一行' [master 14b4dca] 新增加一行 1 file changed, 1 insertion(+)
Les modifications sont désormais enregistrées dans ma branche "master". Ensuite, nous fusionnons la branche "change_site".
$ git merge change_site Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. $ cat test.txt <<<<<<< HEAD w3cschool.cc 新增加一行 ======= www.w3cschool.cc >>>>>>> change_site
Nous avons fusionné la branche précédente dans la branche "master", et un conflit de fusion s'est produit. Ensuite, nous devons la modifier manuellement.
$ vim test.txt $ cat test.txt www.w3cschool.cc 新增加一行 $ git diff diff --cc test.txt index f84c2a4,bccb7c2..0000000 --- a/test.txt +++ b/test.txt @@@ -1,2 -1,1 +1,2 @@@ - w3cschool.cc + www.w3cschool.cc +新增加一行
Dans Git, nous pouvons utiliser git add pour indiquer à Git que le conflit de fichiers a été résolu
$ git status -s UU test.txt $ git add test.txt $ git status -s M test.txt $ git commit [master 88afe0e] Merge branch 'change_site'
Nous avons maintenant résolu avec succès le conflit lors de la fusion et validé le résultat.