¿Hay un equivalente de "git apply –reject" para git rebase?

Quiero usar git rebase para tomar una secuencia de confirmaciones y aplicarlas a una confirmación raíz diferente. Por ejemplo,

 git rebase --onto root start finish 

para get las confirmaciones de start a finish basadas en la root .

Cuando git no puede aplicar un compromiso limpio, actualiza el file para mostrar conflictos como este (ejemplo del manual de git):

  Here are lines that are either unchanged from the common ancestor, or cleanly resolved because only one side changed. <<<<<<< yours:sample.txt Conflict resolution is hard; let's go shopping. ======= Git makes conflict resolution easy. >>>>>>> theirs:sample.txt And here is another line that is cleanly resolved or unmodified. 

El progtwigdor edita el file a lo que debería ser en la nueva twig, y ​​luego ejecuta git --rebase continue para seguir agregando los commits desde la fuente.

Sin embargo, cuando hay muchos cambios en el file entre el start y el start , puede haber muchas líneas como esta y pueden ser difíciles de interpretar. En tales casos, uno podría preferir tener el resultado de "trozos fallidos" en un file, de modo que uno pudiera leer los cambios en la confirmación original (haciendo manualmente los cambios necesarios en el file, y luego ejecutar git rebase --continue para continuar agregando commits).

La opción --reject de git apply hace esto:

  --reject For atomicity, git apply by default fails the whole patch and does not touch the working tree when some of the hunks do not apply. This option makes it apply the parts of the patch that are applicable, and leave the rejected hunks in corresponding *.rej files. 

Este es también el comportamiento del progtwig de patch , por lo que puedo get lo que quiero al primer resultado de la ejecución con git show , y luego aplicarlo con patch . Sin embargo, esto no es conveniente cuando hay muchas confirmaciones involucradas.

¿Hay alguna forma de hacer esto con git rebase (u otro command git)?

Puede hacer algo como esto en una base de compromiso por compromiso.

Cuando se produce un conflicto de fusión, git da un post como:

 CONFLICT (content): Merge conflict in file.c Failed to merge in the changes. Patch failed at 0004 Changes to file The copy of the patch that failed is found in: /home/g/src/project/.git/rebase-apply/patch 

Si file.c está dañado debido a que muestra conflictos de fusión en el file, puede recuperar el file tal como estaba antes de la confirmación con

 git reset file.c git checkout file.c 

Entonces puedes correr

 patch -p1 </home/g/src/project/.git/rebase-apply/patch 

El resultado de esto podría parecerse a algo

 patching file file.c Hunk #2 FAILED at 1133. Hunk #3 FAILED at 1167. Hunk #4 FAILED at 1201. Hunk #5 FAILED at 1241. Hunk #6 FAILED at 1251. Hunk #7 succeeded at 1324 (offset 6 lines). Hunk #8 FAILED at 1325. Hunk #9 succeeded at 2142 (offset 11 lines). Hunk #10 succeeded at 2163 (offset 11 lines). Hunk #11 succeeded at 2181 (offset 11 lines). Hunk #12 succeeded at 2279 (offset 11 lines). Hunk #13 succeeded at 2299 (offset 11 lines). Hunk #14 succeeded at 2412 (offset 11 lines). Hunk #15 succeeded at 2508 (offset 11 lines). Hunk #16 succeeded at 2531 (offset 11 lines). Hunk #17 succeeded at 2540 (offset 11 lines). Hunk #18 succeeded at 2581 (offset 11 lines). Hunk #19 succeeded at 2599 (offset 11 lines). Hunk #20 succeeded at 2611 (offset 11 lines). Hunk #21 succeeded at 2629 (offset 11 lines). Hunk #22 succeeded at 2637 (offset 11 lines). Hunk #23 succeeded at 2668 (offset 11 lines). Hunk #24 succeeded at 2677 (offset 11 lines). Hunk #25 succeeded at 2805 (offset 11 lines). Hunk #26 succeeded at 2871 (offset 11 lines). Hunk #27 succeeded at 2911 (offset 11 lines). Hunk #28 succeeded at 3028 (offset 11 lines). Hunk #29 succeeded at 3085 (offset 11 lines). Hunk #30 succeeded at 3117 (offset 11 lines). Hunk #31 succeeded at 3557 (offset 11 lines). Hunk #32 succeeded at 3572 (offset 11 lines). Hunk #33 succeeded at 4773 (offset 11 lines). Hunk #34 succeeded at 4807 (offset 11 lines). Hunk #35 succeeded at 4859 (offset 11 lines). 6 out of 35 hunks FAILED -- saving rejects to file file.c.rej 

A continuación, realice los cambios en file.c.rej manualmente, luego ejecute

 git add -u git rebase --continue 

continuar.