2010-12-28 15 views
6

Tengo dos ramas en git con esta forma.¿Rebase compleja interactiva en un solo paso?

* fffffff commit f 
* ddddddd commit d 
* bbbbbbb commit b 
| * eeeeeee commit e 
| * ccccccc commit c 
| * aaaaaaa commit a 
|/ 
* 2222222 base revision 2 
* 1111111 base revision 1 

Quiero volver a clasificar y reordenar las confirmaciones como lo haría con rebase --interactive. Sin embargo, quiero intercalar varias de las confirmaciones y terminar con una forma como esta.

* ffffff2 commit f 
* eeeeee2 commit e 
* dddddd2 commit d 
* cccccc2 commit c 
* bbbbbb2 commit b 
* aaaaaaa commit a 
* 2222222 base revision 2 
* 1111111 base revision 1 

¿Hay una manera de hacer esta sincronización en un solo paso? Traté de hacerlo en dos pasos al volver a establecer la base de commit b encima de commit e y luego hacer una segunda rebase interactiva para ordenar todas las confirmaciones. El problema es que obtengo conflictos de combinación (entre commit b y commit e, por ejemplo) que de otro modo no vería (al colocar commit b después de commit a) y no vale la pena resolver los conflictos.

Respuesta

8

de inicio con un solo ramo (ya sea BranchWithF o BranchWithE) y emitir el rebase interactivo, por ejemplo

 
git checkout BranchWithF 
git rebase -i HEAD~3 

Cuando el editor y la lista de confirmación aparece, añadir (es decir: tipo de su teclado ...) e intercalar

 
pick aaaaaaa 
pick ccccccc 
pick eeeeeee 

a la lista como mejor le parezca.

Posteriormente, BranchWithF tendrán los 6 confirmaciones, y se puede tirar a la basura BranchWithE (que todavía tiene sus confirmaciones 3).

+0

¡Guau, perfecto! Nunca supe que podrías agregar líneas durante una rebase interactiva. Tenía una pregunta similar por la que debería obtener crédito aquí: http://stackoverflow.com/questions/3251011/can-i-rebase-and-squash-commits-at-the-same-time –

+0

Respuesta publicada allí. – user502515

Cuestiones relacionadas