Mercurial может сделать это с расширением record .
Он попросит вас указать каждый файл и каждый элемент diff. Например:
% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]
@@ -12,7 +12,7 @@
\setmonofont[Scale=0.88]{Consolas}
% missing from xunicode.sty
\DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
\usepackage[pdftex]{graphicx}
\fi
record this change to 'prelim.tex'? [Ynsfdaq?]
@@ -1281,3 +1281,5 @@
%% Local variables:
%% mode: latex
%% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?] n
Waiting for Emacs...
После коммита оставшийся дифференциал останется позади:
% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
%% Local variables:
%% mode: latex
%% End:
+
+foo
\ No newline at end of file
В качестве альтернативы вам может оказаться проще использовать MQ (Mercurial Queues) для разделения отдельных изменений в вашем хранилище на патчи. Существует также вариант записи MQ (qrecord).
Обновление: Также попробуйте расширение crecord , которое предоставляет интерфейс curses для выбора фрагмента / строки.