-
1. Démarrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 Démon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 Sélection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 Réécrire l’historique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 Déboguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systèmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables d’environnement
- 10.9 Résumé
-
A1. Annexe A: Git dans d’autres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture d’instantané basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise à jour de projets
- A3.6 Inspection et comparaison
- A3.7 Débogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 Systèmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
3.3 Les branches avec Git - Gestion des branches
Gestion des branches
Maintenant que vous avez créé, fusionné et supprimé des branches, regardons de plus près les outils de gestion des branches qui s’avèreront utiles lors d’une utilisation intensive des branches.
La commande git branch
permet en fait bien plus que la simple création et suppression de branches.
Si vous la lancez sans argument, vous obtenez la liste des branches courantes :
$ git branch
iss53
* master
testing
Notez le caractère *
qui préfixe la branche master
: il indique la branche courante (c’est-à-dire la branche sur laquelle le pointeur HEAD
se situe).
Ceci signifie que si, dans cette situation, vous validez des modifications (grâce à git commit
), le pointeur de la branche master
sera mis à jour pour inclure vos modifications.
Pour visualiser la liste des derniers commits sur chaque branche, vous pouvez utiliser le commande git branch -v
:
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readmes
--merged
et --no-merged
sont des options très utiles qui permettent de filtrer les branches de cette liste selon que vous les avez ou ne les avez pas encore fusionnées avec la branche courante.
Pour voir quelles branches ont déjà été fusionnées dans votre branche courante, lancez git branch --merged
:
$ git branch --merged
iss53
* master
Comme vous avez déjà fusionné iss53
un peu plus tôt, vous la voyez dans votre liste.
Les branches de cette liste qui ne comportent pas le préfixe *
peuvent généralement être effacées sans risque au moyen de git branch -d
puisque vous avez déjà intégré leurs modifications dans une autre branche et ne risquez donc pas de perdre quoi que ce soit.
Pour visualiser les branches qui contiennent des travaux qui n’ont pas encore été fusionnés, vous pouvez utiliser la commande git branch --no-merged
:
$ git branch --no-merged
testing
Ceci affiche votre autre branche.
Comme elle contient des modifications qui n’ont pas encore été intégrées, essayer de les supprimer par la commande git branch -d
se solde par un échec :
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
Si vous souhaitez réellement supprimer cette branche et perdre ainsi le travail réalisé, vous pouvez tout de même forcer la suppression avec l’option -D
, comme l’indique le message.
Astuce
|
Les options décrites ci-dessus, Vous pouvez toujours fournir un argument additionnel pour interroger l’état de fusion par rapport à une autre branche sans extraire cette branche avant, comme lorsqu’on se demande ce qui n’a pas été fusionné dans la branche
|
Renommer une branche
Attention
|
Ne renommez pas les branches qui sont encore utilisées par d’autres collaborateurs. Ne renommez pas une branche telle que master/main/mainline avant d’avoir lu la section « Renommer la branche master ». |
Supposez que vous avez une branche appelée mauvais-nom-de-branche et que vous voulez la changer en nom-de-branche-corrigé, tout en conservant l’historique. Vous voulez aussi changer le nom de la branche sur le serveur distant (GitHub, GitLab, ou tout autre serveur). Comment s’y prendre ?
Renommez la branche localement avec la commande git branch --move
:
$ git branch --move mauvais-nom-de-branche nom-de-branche-corrigé
Ceci remplace votre mauvais-nom-de-branche par nom-de-branche-corrigé, mais seulement localement pour l’instant. Pour montrer aux autres la branche corrigée sur le serveur distant, poussez-la :
$ git push --set-upstream origin nom-de-branche-corrigé
Faisons un point rapide :
$ git branch --all
* nom-de-branche-corrigé
main
remotes/origin/mauvais-nom-de-branche
remotes/origin/nom-de-branche-corrigé
remotes/origin/main
Notez que vous êtes sur la branche nom-de-branche-corrigé. La branche corrigée est disponible sur le serveur distant. Cependant la branche mauvaise est encore aussi présente sur le serveur distant. Vous pouvez supprimer la branche mauvaise du serveur distant :
$ git push origin --delete mauvais-nom-de-branche
À présent, le mauvais nom de branche est complètement remplacé par le nom de branche corrigé.
Changer le nom de la branche master
Avertissement
|
Changer le nom d’une branche telle que master/main/mainline/default va casser les outils d’intégration de service et d’aide, ainsi que les scripts de construction/publication que votre dépôt utilise. Avant de le faire, assurez-vous de tout couvrir avec vos collaborateurs. Assurez-vous aussi de rechercher précisément et de mettre à jour toutes les références à la vieille branche dans votre dépôt et dans les scripts. |
Renommez votre branche locale master
en main
avec la commande suivante :
$ git branch --move master main
Il n’y a plus de branche master
en local, parce qu’elle a été renommée en branche main
.
Pour avertir les autres de cette branch main
, vous devez la pousser sur le serveur distant
Cela rend la branche renommée disponible sur le serveur distant.
$ git push --set-upstream origin main
Enfin, nous finissons dans l’état suivant :
git branch --all
* main
remotes/origin/HEAD -> origin/master
remotes/origin/main
remotes/origin/master
Votre branche locale master
a disparu, car elle a été remplacée par la branche main
.
La branche main
est aussi disponible sur le serveur distant.
Mais le serveur distant a toujours la branche master
.
Les autres collaborateurs vont continuer à utiliser la branche master
comme base pour leurs travaux, jusqu’à ce que vous fassiez quelques modifications supplémentaires.
Maintenant, vous avez quelques tâches supplémentaires à faire pour terminer la transition :
-
Tous les autres projets dépendant de celui-ci doivent être avoir leur configuration et leur code modifiés en conséquence.
-
Mettez à jours tous vos fichiers de configuration de test.
-
Ajustez les scripts de construction et de publication.
-
Redirigez les réglages sur votre hôte de dépôt concernant les choses telles que la branche par défaut du dépôt, le règles de fusion et toute autre configuration qui a trait aux noms de branche.
-
Mettez à jour les références à l’ancienne branche dans la documentation.
-
Fermez ou fusionnez toutes les demandes de tirage destinées à l’ancienne branche.
Après toutes ces tâches, et s’être assuré que la branche main se comporte comme la branche master, vous pouvez supprimer la branche master :
$ git push origin --delete master