Es gibt eine Frage zu SO über das Teilen von Hunks mit Magit, und die beiden angegebenen Lösungen bestehen darin, entweder die Region zu inszenieren (eine Region markieren, Stufe treffen) oder alle Hunks mit +
& zu verkleinern / zu vergrößern -
. Das ist nicht was ich will.
Im Statuspuffer von magit möchte ich ein Stück am Punkt oder zumindest an den Linien um den Punkt in zwei Stücke aufteilen.
Drehen Sie dies (entschuldigen Sie meine schlechte Diff-Formatierung)
@@ blah blah blah
- foo
+ bar
+ baz
+
In
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Wenn der Punkt auf der Latte liegt.
Motivationen:
baz
Als Debug-Anweisung würde ich es gerne aus dem Commit vonfoo
&bar
streichen, ohne es loszuwerden.bar
undbaz
nur teilweise verwandt sein, was bedeutet, dass ihre Änderungen nicht im selben Commit sein sollten.bar
ist groß undbaz
klein, wodurch es viel einfacher ist, das Stück zu teilen, als es auszuwählenbar
Ähnlich wie beim letzten Punkt enthält ein Festschreiben mit 20 Zeilen eine einzelne Zeile in der Mitte, die nicht in Szene gesetzt werden soll. Es wäre einfacher, die oberen und unteren zwei Hunks zu teilen und zu inszenieren, wenn man die mittlere ignoriert, als die Region zu verwenden.
Das Obige kann manchmal auftreten, wenn die Diff-Darstellung das Vorher und Nachher von etwas trennt, das geändert wurde, und etwas nicht hilfreiches in der Mitte hat. z.B
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
hat, der genau das tut. IOW Ihre Anfragediff-split-hunk
bezieht sich auf eine Art (oder eine äquivalente) Verwendung aus dem Magit-Status-Puffer.Antworten:
Wie in den obigen Kommentaren erwähnt, unterstützt Magit die Aufteilung eines Hunks in mehrere Hunks nicht über das hinaus, was durch die Verwendung von möglich ist
git diff -U<n>
. Das liegt daran, dass Magit sich auf diesen Git-Befehl verlässt, um die Diffs zu erstellen. Das wird sich nicht ändern, Magit verwendet immer die Unterschiede, die es von Git erhält, wie sie sind.(Tatsächlich entfernt Magit einige Header, die für den Menschen nicht wirklich relevant sind, stellt sie jedoch wieder her, wenn Änderungen vorgenommen werden. Wenn Sie jedoch ein Stück weiter aufteilen, als dies
-U<n>
unterstützt wird, ist dies eine ganz andere Geschichte. Es gibt einen Grund, warum Git erlaubt keine "kleineren Hunks", es wäre nicht in der Lage, sie anzuwenden).Magit unterstützt zwar nicht die Anzeige kleinerer Hunks, wie hier angefordert, unterstützt jedoch die Anwendung nur von Teilen eines Hunks. Wenn die Region während des Staging aktiv ist, wird nur der Teil des Hunks angewendet.
Das hilft nicht viel, wenn sich der Teil, der nicht inszeniert werden soll, genau in der Mitte des Textes befindet, der inszeniert werden soll. Wie andere vorgeschlagen haben, sollten Sie in diesem Fall das ganze Stück inszenieren und dann die Zeile, die Sie nicht in einem zweiten Schritt festschreiben möchten, wieder freigeben.
Das könnte natürlich automatisiert werden. Die einzige Möglichkeit, wie dies automatisiert werden könnte, besteht darin, "den aktuellen Teil mit Ausnahme der Region zu inszenieren" . Ich habe jedoch einige Zweifel, wie oft dies tatsächlich nützlich wäre, und befürchte, dass es nicht einfach wäre, dies robust umzusetzen Daher habe ich derzeit nicht die Absicht, dies umzusetzen.
quelle
Sie können mit Magit Hunks aufteilen.
Anstatt den Cursor einfach im Block zu lassen, wählen Sie die Zeilen aus, die Sie im Block platzieren möchten, und drücken Sie s . Es wird nur der ausgewählte Teil des Hunks inszeniert, während sich der Rest des Hunks noch im nicht inszenierten Bereich befindet.
Auf diese Weise haben Sie es in zwei Teile geteilt. Ich denke, Sie können den gleichen Mechanismus verwenden, um Teile von Hunks in den Stash zu befördern. Bei Verwendung von k wird nur ein Teil des Hunks entfernt.
quelle
Wenn Sie Teile eines Hunks verwerfen möchten, wählen Sie die Zeilen innerhalb des Hunks aus, die Sie verwerfen möchten, und drücken Sie x .
quelle