11.1 Branches dans git
Travailler avec les branches (branches) dans Git est un des aspects clés de la gestion de versions, qui permet de développer plusieurs lignes de travail en parallèle dans un même dépôt. Le branchement rend Git un outil puissant pour la collaboration, les expérimentations et la gestion des différentes versions d'un projet.
Tu peux imaginer les branches dans git comme des dossiers, où git copie ton projet. Tu as le dossier principal de ton projet dans ton répertoire local — master, et git peut créer des copies de ce dossier pour que tu puisses y expérimenter sans casser le code principal qui fonctionne bien. Ces dossiers-copies sont appelés branches.
Les branches sont des versions alternatives du code. Disons que tu veux modifier quelque chose dans un grand projet, faire un test dont tu n'es pas vraiment sûr. Comment le ferais-tu sans git ?
Tu pourrais copier le projet dans un nouveau dossier et essayer de tout changer là-dedans. Si le résultat te plaît, tu pourrais le copier dans le dossier principal. Si ça ne te plaît pas — tu peux l'oublier ou même le supprimer.
Ou prenons un exemple de la vie courante. Disons, l'écriture d'un livre :
- Tu as le manuscrit du livre (branche principale).
- Tu veux essayer de changer la fin (création d'une nouvelle branche).
- Tu écris la nouvelle fin dans un document séparé (travail dans la nouvelle branche).
- Si la nouvelle fin est meilleure, tu remplaces l'ancienne dans le manuscrit (fusion des branches).
- Tu supprimes le document séparé avec la nouvelle fin (suppression de la branche).
11.2 Création de branches
Créer une branche dans IntelliJ IDEA est très facile :
Entrez le nom de la branche :
Intellij IDEA affichera immédiatement le nom de votre branche actuelle en haut du menu :
Et qu'y avait-il avant ?
Il y avait le nom de votre première et principale branche — master.
Maintenant, le nom 'test' est affiché, ce qui signifie que Git (sous la direction d'IntelliJ IDEA) a non seulement créé une nouvelle branche, mais s'y est aussi immédiatement déplacé.
Allons ajouter du code au fichier main.html dans la branche actuelle (test) et committons-le :
11.3 Changer de branche
Étape 1. Choisir une branche.
Maintenant, passons à notre ancienne branche. Cliquons sur le menu en haut, et que voyons-nous ?
Pas d'inquiétude — tout est simple ici :
Local — c'est la liste des branches de votre dépôt git local. Il y en a deux :
- test
- master
Remote — c'est votre dépôt distant qui se trouve sur le serveur GitHub. Nous y avons poussé vos modifications, mais la nouvelle branche n'y est pas, ce qui est logique. Le dépôt distant porte le nom origin, et il n'y a qu'une branche master.
Recent — c'est juste une liste des derniers noms de branches avec lesquels vous avez travaillé : ce point IntelliJ IDEA l'ajoute pour plus de confort et de rapidité.
Le nom origin/master à droite du nom du dépôt local est le nom du dépôt distant avec lequel il est actuellement synchronisé, et où les modifications seront poussées.
Étape 2. Charger le code de la branche dans le dossier actuel.
Étape 3. Vérifiez.
J'ai la branche «master» affichée et l'ancien code :
11.4 Fusion de branches
Essayons maintenant de fusionner le code de nos deux branches.
Étape 1. Pour commencer, ajoutons un autre fichier à notre projet — index.html et écrivons-y un peu de code :
- Créer le fichier index.html
- Écrire le code <h1>Hello</h1>
- Commiter le fichier
Voici à quoi ressemblent mes deux fichiers dans la branche master :
Étape 2. Fusionner les branches.
Nous allons intégrer dans notre branche actuelle (master) les modifications qui ont été apportées dans la branche test.
Pour cela, utilisons aussi le menu du haut et la commande «Merge ‘test’ into ‘master’» :
Étape 3. Vérifier le résultat.
Vérifions :
- En haut est toujours affichée la branche master
- Nous avons 2 fichiers : index.html et main.html
- Le fichier main.html contient le code qui a été ajouté dans la branche test
11.5 Conflits lors de la fusion
Parfois, il y a des conflits lors de la fusion des branches.
Si tu apportes des modifications à un fichier dans différentes branches et que tu essaies de les fusionner, un conflit peut survenir.
Conflit de fichiers texte
Git est un système très intelligent - il comprend les types de fichiers. Si tu apportes des modifications à différents endroits des fichiers qu'il considère comme textes, il transfèrera simplement les modifications d'un fichier à l'autre à l'endroit approprié (comme le ferait un humain).
Conflit de fichiers binaires
Mais si tu modifies quelque part une image ou un document, Git n'essaiera pas de combiner leurs parties en un - il te proposera simplement de choisir quelle version du fichier tu souhaites conserver dans la branche actuelle.
Résolution manuelle des conflits
Si tu fais des modifications au même endroit d'un fichier texte, Git ne pourra pas fusionner correctement les différentes versions et te proposera de le faire :
Voici à quoi cela peut ressembler :
Que vois-tu ici :
- À gauche — le contenu du fichier main.html de la branche master
- À droite — le contenu du fichier main.html de la branche test
- Au milieu, IntelliJ IDEA te propose d'écrire la version finale du code (tu peux cliquer sur les boutons «>>» et «<<» pour insérer automatiquement les modifications à partir d'un fichier)
J'ai accepté la version mater et ajouté le code manuellement. Voilà ce que j'ai obtenu :
11.6 Historique des modifications
Encore quelque chose de utile et intéressant. Tu peux consulter l'historique des modifications de n'importe quel fichier en cliquant sur le bouton Show History. Il y a deux endroits où il peut se trouver. Trouve-les.
Voici à quoi ressemble l'historique des modifications pour moi, pour le fichier main.html :
Explications :
-
À gauche, tu vois l'historique des modifications d'un fichier spécifique :
- Plus la modification est récente, plus elle est en haut, plus elle est ancienne – plus elle est en bas
- Il affiche également l'historique de la fusion des branches
- À droite — les modifications apportées dans un commit spécifique
GO TO FULL VERSION