Tengo la siguiente topología de repositorio de Git:
A-B-F (master)
   \   D (feature-a)
    \ /
     C (feature)
      \
       E (feature-b)
Al reajustar la featurerama, esperaba reajustar todo el subárbol (incluidas las ramas secundarias):
$ git rebase feature master
A-B-F (master)
     \   D (feature-a)
      \ /
       C (feature)
        \
         E (feature-b)
Sin embargo, este es el resultado real:
      C' (feature)
     /
A-B-F (master)
   \   D (feature-a)
    \ /
     C
      \
       E (feature-b)
Sé que puedo arreglarlo fácilmente de forma manual ejecutando:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Pero, ¿hay alguna manera de rebasar automáticamente la rama, incluidos todos sus hijos / descendientes?
                    
                        git
                                version-control
                                branch
                                rebase
                                git-rebase
                                
                    
                    
                        Tomasz Nurkiewicz
fuente
                
                fuente

$ git rebase feature masterser$ git rebase master feature?Respuestas:
fuente
--onto Flugar de--onto B, ya que todas estas confirmaciones ya están en B y las movemos a F ?Hace un par de años escribí algo para manejar este tipo de cosas. (Los comentarios para mejorar son, por supuesto, bienvenidos, pero no juzgues demasiado, ¡fue hace mucho tiempo! ¡Ni siquiera conocía Perl todavía!)
Está destinado a situaciones más estáticas: se configura configurando los parámetros de configuración del formulario
branch.<branch>.autorebaseparent. No tocará ninguna rama que no tenga ese conjunto de parámetros de configuración. Si eso no es lo que quieres, probablemente puedas hackearlo donde quieras sin demasiados problemas. Realmente no lo he usado mucho en el último año o dos, pero cuando lo usé, siempre parecía ser bastante seguro y estable, en la medida de lo posible con el rebase automatizado masivo.Asi que aqui esta. Úselo guardándolo en un archivo llamado
git-auto-rebaseen suPATH. Probablemente también sea una buena idea usar la-nopción de ejecución en seco ( ) antes de probarla de verdad. Puede ser un poco más detallado de lo que realmente desea, pero le mostrará lo que intentará rebasar y sobre qué. Podría ahorrarte un poco de dolor.Una cosa que he encontrado, desde que abordé esto originalmente, es que a veces la respuesta es que ¡en realidad no querías rebasar en absoluto! Hay algo que decir para comenzar las ramas temáticas en el antepasado común correcto en primer lugar, y no tratar de avanzar después de eso. Pero eso es entre usted y su flujo de trabajo.
fuente
Si es necesario actualizar una fecha de confirmación ,
GIT_COMMITTER_DATEse puede usar la variable de entorno ( manual ). También use la--formatopción para obtener un nombre de rama sin formato adicional.NB: se requiere para configurar ya sea
--committer-date-is-author-dateoGIT_COMMITTER_DATEpara garantizar la misma suma de comprobación paraC',Ca'yCb'commit (en rebase característica , característica-a y característica-b correspondientemente).fuente