Git Interactive Base Change: Un outil puissant pour améliorer l'efficacité de développement
Le contrôle de version git est devenu standard dans la boîte à outils des développeurs modernes. Des commandes telles que commit
, push
et pull
sont devenues depuis longtemps la mémoire musculaire. Cependant, relativement parlant, peu de développeurs comprennent les fonctionnalités "plus avancées" dans GIT et l'énorme valeur de ces fonctionnalités! Cet article explorera l'un des outils les plus puissants de Git - "Rebase interactive".
git rebase -i
Pourquoi un historique de soumission bien structuré est-il important? Imaginez le contraire: un historique de soumission difficile à lire, vous ne savez pas ce que les changements récents de votre collègue ont réellement fait. Il y aura de plus en plus de «coins sombres» dans des projets comme celui-ci, et vous ne connaissez que la petite partie de votre participation.
Comparez-le avec un historique de validation propre et bien structuré: il aide à rendre la base de code du projet plus lisible et et
plus facile à comprendre. C'est une partie nécessaire d'un programme sain et durable!Que peut faire le changement de base interactif pour vous Interactive Rebase vous aide à optimiser et à nettoyer votre historique de validation. Il couvre de nombreux cas d'utilisation différents, dont certains vous permettent de faire ce qui suit:
comme certains autres outils Git, renforcez interactivement "réécriture de l'histoire". Cela signifie que lorsque vous utilisez des opérations de rebase interactives pour faire fonctionner une série de validations, cette partie de l'histoire de la validation sera réécrite par : Le hachage SHA-1 du commit changera. Ce sont de nouveaux objets de validation, pour ainsi dire. Le fait que
nécessite une règle simple mais importante à suivre: n'utilisez pas de réprimandes interactives (ou d'autres outils pour réécrire l'historique) sur les validations que vous avez partagées avec des collègues du référentiel distant. Au lieu de cela, utilisez-le pour nettoyer vos propres commits locaux - par exemple, dans l'une de vos propres branches de fonctionnalités, puis fusionnez-les dans la branche de l'équipe.Mécanisme de base de l'opération de base interactive
Étape 1: Où devez-vous commencer la session?
La première question à laquelle vous devez répondre est: "Quelle partie de l'historique des engagements est-ce que je veux opérer?" Donnons un exemple pratique, supposons que nous voulons modifier les anciennes informations de validation (c'est exactement ce que nous allons faire plus tard dans la pratique).
Afin de pouvoir modifier les informations de validation en C2, nous devons démarrer la session de rébase interactive à son engagement parent (ou plus tôt, si vous préférez). Dans cet exemple, nous utiliserons C1 comme point de départ pour la session Rebase interactive.
Démarrer une session réelle est très simple:
Nous utilisons la commande
avec le drapeau<code>$ git rebase -i HEAD~3</code>
pour spécifier un engagement qui "est à la traîne derrière la tête de la tête 3 commet". Alternativement, je pourrais également fournir un hachage SHA-1 spécifique. -i
git rebase
Étape 3: Dites à Git ce que vous voulez faire HEAD~3
Dans cette étape, deux points doivent être prêts à se présenter à:
L'un des cas d'utilisation les plus populaires pour la rébase interactive est que vous pouvez modifier les anciennes soumissions par la suite. Vous savez peut-être que
vous permet également de modifier les informations soumises - mais cela ne s'applique qu'aux dernières soumissions Regardons un scénario spécifique. Vous trouverez ci-dessous une image des informations de soumission d'erreur qui doivent être corrigées. git commit --amend
Remarque: Pour une meilleure vue d'ensemble et une visualisation plus claire, j'ai utilisé le client Tower Git Desktop dans certaines captures d'écran. Vous n'avez pas besoin d'une tour pour suivre ce tutoriel.
Notre première étape consiste à déterminer l'engagement de base de cette session de rebase interactive. Puisque nous devons (au moins) revenir à l'engagement parent de notre engagement "Bad Apple", nous utilisons (trois engins derrière les commits de tête, c'est-à-dire le commit intitulé "Changer les titres ...") comme point de départ pour La session:
Après avoir exécuté cette commande, votre éditeur préféré ouvrira et affichera la liste des validations que vous venez de sélectionner (en fournissant un engagement de base).
HEAD~3
<code>$ git rebase -i HEAD~3</code>
Un rappel: Bien que vous puissiez être tenté de le faire, nous ne modifierons pas les informations de soumission ici. Nous utilisons uniquement le "mot-clé d'opération"
pour marquer les lignes correspondantes de. Dans notre cas, nous voulons remplacer le commit (ce qui signifie que nous voulons modifier les informations de la validation, mais garder le reste de l'engagement).
Une fois que vous remplacez le mot-clé standard par votre mot-clé d'action préféré (qui signifie "accepter les validations telles quelles"), vous enregistrez et fermez simplement la fenêtre.
Après cela, une nouvelle fenêtre d'éditeur s'ouvrira avec les informations de validation actuelles. Enfin, nous pouvons faire ce que nous avions prévu de faire au début: modifiez ce vieux message de validation!
Après avoir apporté des modifications et enregistré et fermé la fenêtre de l'éditeur, la session de rebase interactive est terminée - nos informations de soumission ont été mises à jour! ?
Interactive Rebase vous permet également de supprimer Old Commits de l'histoire dont vous n'avez pas besoin (ou ne voulez pas). Imaginez que vous incluez accidentellement un mot de passe personnel dans votre soumission récente: dans la plupart des cas, ces informations sensibles ne doivent pas être incluses dans la base de code.
ces données complètement propres à partir du référentiel! Déterminions d'abord l'engagement de base de la session de rebase interactive. Étant donné que nous devons commencer au moins avec la validation du parent du mauvais engagement, nous utilisons la «structure de balisage d'optimiser ...» comme base:
Veuillez noter que cette fois, j'ai utilisé le hachage SHA-1 spécifique dans la commande
<code>$ git rebase -i HEAD~3</code>
pour gérer cet engagement. git rebase -i
HEAD~2
Après avoir exécuté cette commande, nous reverrons une liste de validation.
Cette fois, nous utilisons le mot-clé
drop
Quoi que vous choisissiez, après avoir enregistré et fermé la fenêtre de l'éditeur, la soumission sera supprimée de votre historique de référentiel!
fusionner plusieurs engins dans un
Un autre cas d'utilisation pour Rebase interactif est lorsque vous souhaitez fusionner plusieurs engins séparés D'une manière générale, faire un engagement "plus grand" (en combinant plusieurs engins en un) n'est pas une bonne stratégie dans la plupart des cas. La règle générale est de garder l'engagement aussi petit que possible, car "plus petit" signifie "plus facile à lire et à comprendre". Cependant, dans certains cas, cela a encore du sens. Voici deux exemples:
Supposons que sémantiquement, il est plus logique de fusionner ces deux engagements dans un seul engagement. À l'aide de l'outil Rebase interactif, nous pouvons le faire: Jusqu'à présent, vous vous êtes habitué à ce qui se passe: une fenêtre d'éditeur s'ouvrira avec une liste de soumissions.
. Il y a une chose importante à savoir sur le fonctionnement de Cela explique pourquoi j'ai marqué la ligne 2 avec le mot-clé
J'espère que vous convenez que l'outil de rebase interactif de Git est très précieux! En tant que développeurs, nous devons nous efforcer d'une histoire propre et claire. C'est un facteur clé pour garder la base de code saine et facile à comprendre (pour vos coéquipiers et vous-même, après un certain temps, il s'est écoulé). Si vous voulez en savoir plus, je recommande fortement la "Kit de premiers soins GIT". Il s'agit d'une courte collection de vidéos (gratuite) qui vous montre comment nettoyer et annuler les erreurs dans GIT. Amusez-vous! Git Rebase et Git Merge sont deux façons différentes d'intégrer les changements d'une branche dans une autre. Git Merge est un moyen de combiner directement le code à partir de deux branches différentes. Il crée un nouvel engagement dans l'histoire, préservant l'ordre chronologique des commits. Git Rebase, en revanche, est un moyen de déplacer ou de combiner une série de engagements dans un nouvel engagement de base. C'est comme dire "Je veux ajouter le travail des autres sur mes changements". En d'autres termes, il vous permet de placer des modifications à la branche actuelle sur le dessus d'une autre branche. Si vous souhaitez annuler la rébase Git, vous pouvez utiliser la commande Git Interactive Rebase vous permet de changer de validation de diverses manières, telles que l'édition, la suppression et la compression. Vous pouvez non seulement modifier les informations de validation, mais également modifier le code réel (si vous faites une erreur). Il s'agit d'un outil puissant qui vous donne un contrôle complet sur l'historique de soumission de votre projet. La compression est l'acte de fusionner plusieurs engagements dans un seul engagement. Dans GIT, vous pouvez comprimer l'engagement en utilisant la commande Bien que Git Interactive Rebase soit un outil puissant, il peut être dangereux s'il est mal utilisé. Il réécrit l'histoire de la validation, ce qui peut causer des problèmes si vous avez affaire à une branche publique à laquelle d'autres sont également aux prises. Il est recommandé de l'utiliser sur des succursales locales qui n'ont pas encore été poussées. Les affrontements peuvent se produire pendant le processus de rébase. Git s'arrêtera et vous permettra de résoudre ces conflits avant de continuer. Vous pouvez corriger les modifications contradictoires en modifiant les fichiers, puis utiliser Oui, vous pouvez diviser un engagement en engagements plus petits à l'aide de Git Interactive Rebase. Ceci est très utile si vous apportez plusieurs modifications dans un seul engagement, mais décidez ensuite qu'ils devraient être séparés. Vous pouvez modifier les informations de soumission lors de la rebase interactive. Dans la liste de soumission, remplacez Oui, vous pouvez utiliser Git Interactive Rebase pour modifier l'ordre des validations. Dans la liste des validations, vous pouvez simplement modifier l'ordre des lignes pour modifier l'ordre des commits. Ceci est très utile si vous souhaitez rendre votre histoire de validation plus logique ou plus claire.
Complétons ensemble un exemple pratique et utilisons la situation indiquée dans l'image suivante comme notre situation de départ.
squash
<code>$ git rebase -i HEAD~3</code>
:
squash
dans notre exemple. squash
Après avoir enregistré et fermé cette fenêtre, une nouvelle fenêtre s'ouvrira. En effet, en combinant plusieurs commits, nous créerons bien sûr un nouvel engagement. Et cette soumission nécessite également des informations de soumission, comme toute autre soumission!
squash
Après avoir enregistré et fermé cette fenêtre d'éditeur, nous pouvons dire fièrement: c'était deux commits distincts, mais maintenant c'est un engagement!
Utilisez les fonctions puissantes du changement de base interactif
Git Interactive Change Base FAQ (FAQ)
Quelle est la différence entre Git Rebase et Git Merge?
Comment annuler la rébase Git?
git reflog
pour trouver l'engagement à laquelle vous souhaitez revenir, puis utiliser la commande git reset --hard HEAD@{number}
. La commande git reflog
affiche une liste de chaque modification apportée à la tête, et la commande git reset
vous permet de définir la tête actuelle à l'état spécifié. Quel est le but de Git Interactive Rebase?
Comment utiliser la soumission de compression de base variable interactive GIT?
git rebase -i
suivi par le hachage de la commission à compresser. Dans l'éditeur de texte ouvert, vous pouvez marquer l'engagement que vous souhaitez compresser en remplaçant pick
par squash
ou s
. Quels sont les risques d'utiliser Git Interactive Rebase?
Comment résoudre les conflits pendant la base de changement Git?
git add
pour ajouter des fichiers résolus pour résoudre les conflits. Une fois que tous les conflits sont résolus, vous pouvez continuer à modifier la base en utilisant git rebase --continue
. Puis-je utiliser Git Interactive Change Base pour diviser l'engagement?
Comment modifier les informations de soumission à l'aide de la base de changement interactive GIT?
pick
par reword
ou r
pour marquer la soumission à modifier. Lorsque vous continuez, Git ouvrira un éditeur de texte pour chaque soumission marquée reword
, vous permettant de modifier les informations de soumission. Quelle est la différence entre Git Rebase et Git Pull?
Git pull
est une commande qui prend des modifications d'un référentiel distant et les fusionne dans la branche actuelle. D'un autre côté, Git rebase
est une commande qui déplace ou combine une série de validations dans un nouvel engagement de base. Bien que les deux commandes soient utilisées pour les modifications d'intégration, elles sont effectuées différemment. Puis-je utiliser Git Interactive Rebase pour modifier l'ordre des validations?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!