2012-05-02 7 views
15

Digamos que tengo una rama de tema cuyo historial completo quiero reescribir desde que se creó originalmente desde el maestro para una solicitud de extracción. Por alguna razón, no es fácil ni obvia usando git log para determinar el hash cometer quiero pasar aRebase interactivo de una rama con su punto de divergencia del maestro

git rebase -i <commit> 

Sé que puedo utilizar git merge-base <branch1> <branch2 || master> para encontrar la confirmación de que dos referencias pueden rastrear su ascendencia desde y puedo usar eso para determinar el compromiso. Lo que me gustaría saber es si hay una mejor manera de reajustar de forma interactiva toda esta rama (ya sea maestro ha avanzado o no) que el uso de

git rebase -i `git merge-base my_branch master` 

EDIT: No quiero cambiar la matriz de la primera comprometerse hecho en esta rama para que git rebase -i master solo funcione en el caso en que ambos maestros no hayan avanzado desde que se creó la bifurcación y la bifurcación se creó a partir del maestro de compromiso actualmente apunta.

+0

Esto no es una respuesta sino un hack interesante que surgió. Puse lo siguiente en mi .profile. 'function gri() { git rebase -i \' git merge-base $ @ master \ ' }' – Aaron

Respuesta

12

Tal vez estoy malinterpretando su pregunta, pero creo que git rebase -i master debe hacer lo que quiera. Identificará la base de fusión y volverá a establecer la base de toda la bifurcación desde ese punto hasta la CABEZA actual, de modo que parezca haberse ramificado a partir de la sugerencia actual del maestro.

Además, si el maestro no ha avanzado, entonces el rebase prácticamente no será operativo.

+0

Gracias. Más tarde me di cuenta de que git rebase -i master haría eso, pero qué pasaría si quisiera reajustar de forma interactiva sin cambiar el encabezado de mi rama para que sea el actual jefe de maestros en caso de que ya no sean lo mismo. – Aaron

+0

Si está en 'my-branch' y ejecuta' git rebase -i master', solo actualizará la referencia 'my-branch' - no actualizará' master'. Rebasing mueve la rama _current_ a otro punto de su padre de rama (o potencialmente a un padre de rama completamente diferente si usa '--onto'), pero no modifica ninguna otra rama. – twalberg

+0

Lo siento, supongo que lo que quise decir es que hay una manera más simple que lo que publiqué anteriormente para volver a establecer una base de una bifurcación en la confirmación en el maestro de la que procede sin cambiar el padre de la primera confirmación de la sucursal. – Aaron

Cuestiones relacionadas