Puis-je partager un déjà fendu morceau avec git?
J'ai découvert récemment git est patch
option pour le add
commande, et je dois dire que c'est vraiment une fonctionnalité fantastique.
J'ai aussi découvert qu'un grand morceau pourrait être divisé en plus petits mecs, appuyez sur la touche s clé, ce qui ajoute à la précision de la commettre.
Mais que faire si je veux encore plus de précision, si le fractionnement hunk est pas assez petit?
Prenons l'exemple de cette déjà fendu hunk:
@@ -34,12 +34,7 @@
width: 440px;
}
-/*#field_teacher_id {
- display: block;
- } */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
width: 300px;
}
Comment puis-je ajouter le CSS commentaire que l'enlèvement de la prochaine validation ? Le s
option n'est plus disponible!
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez
git add -p
et même après le fractionnement avec s, vous n'avez pas un assez petit changement, vous pouvez utiliser e pour modifier le patch directement.Cela peut être un peu déroutant, mais si vous soigneusement suivez les instructions dans la fenêtre de l'éditeur qui sera ouverte après avoir appuyé sur e puis vous serez amende. Dans le cas que vous avez cité, vous voulez remplacer le
-
avec un espace au début de ces lignes:... et de supprimer la ligne suivante, c'est à dire celui qui commence par
+
. Si vous enregistrez et quittez votre éditeur de texte, juste la suppression de la CSS commentaire sera mis en scène.-
caractères, et Git s'est plaint que mon patch ne s'applique pas.#
) avant de tenter cela 🙂+
dans le beau gosse comme décrit, il est effectivement supprimé dans le fichier. Je ne veux pas commettre, mais veulent toujours dans le fichier.git add -p
et édité un morceau avece
qui ne devrait toucher que ce qui est mis en scène, pas de votre arbre de travail.e
était que je tabasser tout.Disons que votre
example.css
ressemble à ceci:Maintenant, nous allons modifier les sélecteurs de style dans le bloc du milieu, et pendant que nous y sommes, supprimer certains vieux commenté de style nous n'avons pas besoin de plus.
C'était facile, maintenant, nous allons engager. Mais attendez, je veux maintenir la logique de séparation des changements dans le contrôle de version pour simple pas-sage de la revue de code, et donc que mon équipe et moi-même pouvez facilement rechercher commettre l'histoire pour plus de détails.
La suppression de l'ancien code est logiquement distincte de l'autre style sélecteur de changement. Nous allons avoir besoin de deux tailles distinctes s'engage, nous allons donc ajouter des mecs pour un patch.
Oups, on dirait que les changements sont trop proches, de sorte que git a hunked ensemble.
Même en essayant de split en appuyant sur s a le même résultat, parce que la scission n'est pas granuleux assez pour nos précision les changements. Lignes inchangées entre les lignes modifiées pour git pour être en mesure de diviser automatiquement le patch.
Donc, nous allons manuellement modifier en appuyant sur e
git va ouvrir le patch dans notre éditeur de choix.
Passons en revue l'objectif:
Nous voulons diviser cela en deux commits:
Le premier commit implique la suppression de certaines lignes (commentaire de suppression).
Pour supprimer les lignes commentées, juste les laisser seuls, ils sont déjà marqués pour suivre les suppressions dans le contrôle de version comme nous voulons.
-/*#field_teacher_id {
- display: block;
- } */
La deuxième commit est un changement, qui est suivie par l'enregistrement de deux suppressions et ajouts:
Suppressions (ancien sélecteur de lignes supprimées)
De conserver l'ancien sélecteur de lignes (ne pas les supprimer au cours de ce commit), nous voulons...
...ce qui signifie littéralement en remplaçant le moins
-
signes avec un espacecaractère.
Donc, ces trois lignes...
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
...deviendra (avis l'espace lors de la première de toutes les 3 lignes):
form.table-form #field_teacher + label,
form.table-form #field_producer_distributor + label {
Ajouts (nouveau sélecteur de ligne ajoutée)
De ne pas payer l'attention sur le nouveau sélecteur de ligne ajoutée au cours de cette validation, nous voulons...
...qui signifie littéralement à supprimer la ligne entière:
+#user-register form.table-form .field-type-checkbox label {
(Bonus: Si vous arrive d'être en utilisant vim comme votre éditeur de texte, appuyez sur la touche dd pour supprimer une ligne. Nano utilisateurs appuyez sur Ctrl+K)
Votre éditeur devrait ressembler à ceci lorsque vous enregistrez:
Maintenant, nous allons engager.
Et juste pour s'assurer que, nous allons voir les changements depuis le dernier commit.
Parfait, vous pouvez voir que les suppressions ont été inclus dans la livraison atomique. Maintenant, nous allons finir le travail et de commettre le reste.
Enfin, vous pouvez voir le dernier commit ne comprend que le sélecteur de changements.
+
avec#
. Le résultat est le même, mais peut-être que vous êtes à l'aise avec la suppression (et d'être incapable de revenir) ou vous souhaitez faire des essais avant de vous enregistrer.r
#
au cours de la plus xDSi vous pouvez utiliser git gui, il permet à des changements de phase, ligne par ligne. Malheureusement, je ne sais pas comment faire à partir de la ligne de commande - ou même si c'est possible.
Une autre option que j'ai utilisé dans le passé est en train part de la variation (gardez l'éditeur ouvert), validation de l'bits je veux, d'annulation et de ré-enregistrer à partir de l'éditeur. Pas très élégant, mais fait le travail. 🙂
MODIFIER (git-gui utilisation):
Je ne suis pas sûr si le git-gui est le même dans les msysgit et versions de linux, j'ai seulement utilisé le msysgit un. Mais en supposant que c'est la même chose, lorsque vous l'exécutez, il y a quatre volets: haut-volet de gauche est votre répertoire de travail, des changements, en bas à gauche est votre stades de changements, en haut à droite est la diff sur le fichier sélectionné (que ce soit de travail dir ou mise en scène), et en bas à droite est pour la description de la commettre (je soupçonne que vous n'en aurez pas besoin). Lorsque vous cliquez sur un fichier dans le coin supérieur droit, vous verrez la diff. Si vous cliquez droit sur un diff de ligne, vous verrez un menu contextuel. Les deux options à prendre en compte sont "stade de beau mec pour s'engager" et "ligne de scène pour s'engager". Vous gardez la sélection de "ligne de scène pour s'engager" sur les lignes que vous souhaitez engager, et vous avez terminé. Vous pouvez même sélectionner plusieurs lignes et le stade si vous le souhaitez. Vous pouvez toujours cliquer sur le fichier dans la mise en scène de la boîte pour voir ce que vous êtes à bout de commettre.
Que pour la validation, vous pouvez utiliser l'outil graphique ou la ligne de commande.
git-gui
mais je n'ai aucune idée de comment réaliser ce que vous décrivez.Une façon de le faire est de passer le morceau,
git add
que ce soit d'autre dont vous avez besoin, puis exécutezgit add
de nouveau. Si c'est le seul morceau, vous serez en mesure de le découper.Si vous êtes inquiet au sujet de la commande de commits, il suffit d'utiliser
git rebase -i
.git add -p
de nouveau, mais je ne peut pas le diviser. J'obtiens ceci :Stage this hunk [y,n,q,a,d,/,e,?]?
et puis en appuyant sur 's' impression de l'aide. BTW, vous signifiaitadd patch
, paspatch add
? Ou est-il ungit patch
plugin je dois installer?git rebase -i
. Ce qui est plus flexible quecommit --amend