Rattacher la tête dans Git

Abdul Jabbar 24 mars 2022
Rattacher la tête dans Git

Un référentiel Git peut être défini comme un groupe d’objets et de références. Les branches sont les objets que nous utilisons pour présenter notre travail. Git traite également les balises qui référencent les commits dans la branche particulière.

Un commit est probablement l’état du code source utilisé à un certain moment dans un certain temps. Les Commits se composent de parents et d’enfants, ainsi que de données complètes sur qui a créé le commit et quand il a été créé. Les Commits sont placés dans le référentiel en tant qu’objets dans la branche.

La référence HEAD pointe vers le dernier commit de la branche actuelle. Le pointeur HEAD est une référence à la branche actuellement extraite, et il pointe vers le haut d’une branche.

Cependant, vous pouvez remonter le temps sans vérifier une branch. Vous pouvez utiliser le pointeur HEAD pour récupérer n’importe quel commit dans une branche, puis vous pouvez utiliser l’index pour récupérer facilement n’importe quelle version d’un fichier.

Vous pouvez utiliser le pointeur HEAD et les pointeurs d’index pour effectuer le check-out d’un commit spécifique appelé état HEAD détaché dans Git. De plus, vous pouvez extraire un commit spécifique et créer une nouvelle branche basée sur un commit spécifique dans une branche.

Cela ne deviendra pas un problème si nous ne le faisons qu’une fois dans une lune bleue. Cependant, si nous le répétons beaucoup, nous commencerons bientôt à nous demander comment revenir à cette branche sur laquelle nous travaillions.

La solution est très simple, car avant de checker une branche, il faut utiliser la commande git checkout master. Cette commande nous ramène à la branche sur laquelle nous travaillions avant le commit, mais cela n’affecte pas le commit que nous étions en train de vérifier.

Une solution propre serait de mettre en place un nouveau référentiel Git dédié à la tenue de la série de correctifs et de le rendre disponible pour que d’autres puissent extraire la dernière branche à tout moment.

Ces situations sont suffisamment rares pour que la convivialité et le coût des performances de l’implémentation de HEAD détachés l’emportent sur leurs avantages, donc Git manque actuellement de cette fonctionnalité. Git peut modifier les commits. Cependant, il est impossible de modifier le dernier commit sur un HEAD détaché.

Git a un moyen de supprimer définitivement les commits en créant une branche secrète, en enregistrant les données de commit dans cette branche, puis en supprimant définitivement le commit de HEAD. Cependant, cette fonctionnalité n’est disponible que lorsqu’un seul commit est détaché de HEAD. Si un commit a plusieurs parents, il est impossible de le supprimer de cette branche.

Tête détachée dans Git

Cependant, lorsque nous passons à une autre branche, la situation est différente. Si notre répertoire de travail est extrait, il est mis à jour en HEAD et nous ne pouvons plus modifier les fichiers qu’il contient, ou nous pouvons créer de nouvelles modifications si elles n’entrent pas en conflit avec la branche vers laquelle nous sommes passés.

Dans ce cas, HEAD est détaché de la branche courante. En même temps, nous pouvons utiliser la commande git checkout pour changer de branche sans mettre à jour notre répertoire de travail vers HEAD, donc HEAD peut être détaché en même temps qu’il est attaché.

C’est assez déroutant, mais cela peut être utile si nous voulons passer d’une branche à l’autre sans toucher rapidement au répertoire de travail ou passer à une autre branche et extraire simultanément un nouveau répertoire de travail. Nous pouvons utiliser git checkout -b <newbranchname> <commit> pour ce faire.

Nous pouvons jouer comme ça; il suffit de vérifier la branche que nous désirons.

$ git checkout <branch>

Par example:

$ git checkout master

Si nous voulons conserver les modifications sur lesquelles nous travaillons, nous devons créer une nouvelle branche ou stocker nos modifications dans la branche. Tout checkout d’un commit récent qui ne peut pas être le nom d’une de nos branches nous donnera un HEAD détaché.

Lorsque HEAD est détaché, les commits semblent normaux, sauf qu’aucune branche nommée n’est mise à jour. C’est comme une branche inconnue. Par exemple, nous pouvons dire, si nous vérifions une branche distante avant de la suivre en premier ; finalement, on se retrouvera avec un HEAD détaché.

Auteur: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

Article connexe - Git Head