Il y a une question sur SO à propos de la division des mecs en utilisant magit, et les deux solutions proposées sont soit de mettre en scène la région (marquer une région, frapper la scène), soit de réduire / agrandir tous les mecs en utilisant +
& -
. Ce n'est pas ce que je recherche.
Dans le tampon d'état de magit, je veux diviser un morceau en deux morceaux, au point, ou au moins aux lignes autour du point.
Tourner cela (excusez mon mauvais formatage diff)
@@ blah blah blah
- foo
+ bar
+ baz
+
Dans
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Lorsque le point est sur la barre.
Motivations:
baz
étant une déclaration de débogage, je voudrais donc la supprimer de la validation defoo
&bar
sans m'en débarrasser.bar
etbaz
n'étant que partiellement liés, ce qui signifie que leurs modifications ne devraient pas être dans le même commit.bar
est grand etbaz
petit, ce qui facilite beaucoup la division du morceau plutôt que la sélectionbar
Semblable au dernier point, disons qu'un commit de 20 lignes contient une seule ligne au milieu qui ne doit pas être mise en scène. Il serait plus facile de diviser et de mettre en scène les deux mecs supérieurs et inférieurs en ignorant celui du milieu que d'utiliser la région.
Ce qui précède peut survenir parfois lorsque la présentation diff sépare l'avant et l'après de quelque chose qui a été modifié et a quelque chose de inutile au milieu. par exemple
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
qui fait exactement cela. IOW votre demande est pour un moyen d'utiliserdiff-split-hunk
(ou quelque chose d'équivalent) à partir du tampon d'état magit.Réponses:
Comme mentionné dans les commentaires ci-dessus, Magit ne prend pas en charge la division d'un morceau en plusieurs morceaux au-delà de ce qui est possible en utilisant
git diff -U<n>
. C'est parce que Magit s'appuie sur cette commande Git pour créer les diffs. Cela ne va pas changer, Magit utilisera toujours les différences qu'il obtient de Git en l'état.. ( En fait Magit décaper des en- têtes qui ne sont pas vraiment pertinents pour les humains, mais ne les restaure lors de l' application des modifications Mais le fractionnement d' un gros morceau plus loin que ce qui
-U<n>
soutient est une toute autre histoire, cela conduirait dans un trou de lapin - il y a une raison pour laquelle Git ne permet pas les "petits mecs", il ne pourrait pas les appliquer).Bien que Magit ne prenne pas en charge l'affichage de petits morceaux comme demandé ici, il ne prend en charge que l'application de certaines parties d'un morceau. Lorsque la région est active pendant la mise en scène, seule cette partie du morceau est appliquée.
Cela n'aide pas beaucoup lorsque la partie qui ne doit pas être mise en scène est en plein milieu du texte qui doit être mis en scène. Comme d'autres l'ont suggéré, ce que vous devez faire dans ce cas est de mettre en scène l'intégralité du morceau, puis de mettre en scène la ligne que vous ne voulez pas engager dans une deuxième étape.
Cela pourrait bien sûr être automatisé. La seule façon dont je peux voir comment cela pourrait être automatisé est de «mettre en scène le morceau actuel, sauf pour la région. . Et je n'ai donc pas l'intention de le mettre en œuvre actuellement.
la source
Vous pouvez diviser des mecs avec Magit.
Au lieu de simplement laisser le curseur à l'intérieur du morceau, sélectionnez les lignes que vous souhaitez mettre en scène à partir du morceau et appuyez sur s . Seule la partie sélectionnée du morceau sera mise en scène, tandis que le reste du morceau se trouve toujours dans la zone non mise en scène.
De cette façon, vous l'avez divisé en deux. Je pense que vous pouvez utiliser le même mécanisme pour déplacer des pièces de mecs dans la cachette. Lorsque vous utilisez k, vous purgerez simplement une partie du morceau.
la source
Si vous souhaitez supprimer des parties d'un morceau, sélectionnez les lignes du morceau que vous souhaitez supprimer et appuyez sur x .
la source