Есть вопрос к SO о расщеплении фрагментов с помощью magit, и два приведенных решения - либо расположить регион (отметить регион, этап попадания), либо сократить / увеличить все фрагменты, используя +
& -
. Это не то, что я после.
В буфере статуса magit я хочу разделить кусок на два фрагмента, в точке или, по крайней мере, в линиях вокруг точки.
Включаю это (извините за плохое форматирование различий)
@@ blah blah blah
- foo
+ bar
+ baz
+
В
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Когда точка находится на панели.
Мотивы:
baz
будучи отладочным оператором, я бы хотел исключить его из коммитаfoo
& иbar
не избавляться от него.bar
иbaz
будучи только частично связанными, это означает, что их изменения не должны быть в одном коммите.bar
является большим иbaz
маленьким, что делает гораздо проще разделить кусок, чем выбратьbar
Аналогично последней точке, скажем, фиксация из 20 строк содержит одну строку в середине, которую не следует ставить. Было бы легче разделить и поставить два верхних и нижних куска, игнорируя средний, чем использовать регион.
Вышеописанное может иногда возникать, когда представление diff будет отделять до и после чего-то, что было изменено, и иметь что-то бесполезное в середине. например
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
которая делает именно это. IOW ваш запрос на способ использованияdiff-split-hunk
(или что-то эквивалентное) из буфера magit-status.Ответы:
Как упомянуто в комментариях выше, Magit не поддерживает разбиение фрагмента на несколько фрагментов сверх того, что возможно с помощью
git diff -U<n>
. Это потому, что Magit использует команду Git для создания различий. Это не изменится, Magit всегда будет использовать различия, которые он получает от Git как есть.(На самом деле, Magit удаляет некоторые заголовки, которые на самом деле не имеют отношения к людям, но восстанавливает их при применении изменений. Но разделение фрагмента дальше, чем то, что
-U<n>
поддерживает, это совсем другая история, это привело бы к кроличьей норе - причина, почему Git не разрешает "меньшие фрагменты", он не сможет их применить).Хотя Magit не поддерживает отображение меньших фрагментов, как здесь предлагается, он поддерживает применение только частей фрагмента. Когда регион активен во время постановки, применяется только эта часть блока.
Это не очень помогает, когда часть, которую не нужно ставить, находится прямо в середине текста, который нужно ставить. Как и предполагали другие, в этом случае вы должны сделать весь кусок, а затем отключить строку, которую не хотите фиксировать на втором шаге.
Это, конечно, может быть автоматизировано. Единственный способ, которым я могу увидеть, как это можно автоматизировать, - это «поставить текущую ломоть за исключением региона. Но у меня есть некоторые сомнения относительно того, как часто это может быть полезным, и боюсь, что это будет нелегко реализовать с такой надежностью». И поэтому я в настоящее время не намерен это реализовывать.
источник
Вы можете разделить куски с помощью Magit.
Вместо того, чтобы просто оставлять курсор внутри блока, выберите линии, которые вы хотите выделить из блока, и нажмите s . Только выбранная часть фрагмента будет поставлена, тогда как остальная часть фрагмента все еще будет находиться в неустановленной области.
Таким образом, вы разделили его на две части. Я думаю, что вы можете использовать тот же механизм для перемещения частей кусков в тайник. При использовании k вы просто удалите часть фрагмента.
источник
Если вы хотите удалить части фрагмента, выберите строки внутри фрагмента, который вы хотите удалить, и нажмите x .
источник