¿Qué significa especificar dos blobs en `git rebase`?

Mi pregunta es en dos partes.

Primera parte: dos blobs en git rebase

Estoy familiarizado con git rebase -i HEAD^n , donde n significa el número de commits atrás en los que desea volver a realizar la database.

Pero, a veces también veo git rebase -i <branch> HEAD . En ese caso, ¿cómo cambia el parámetro <branch> agregado?

Segunda parte: página de manual para git rebase

Entonces … Revisé la página del manual, y veo lo siguiente:

Sinopsis de la página man para git rebase

En esa página man, veo [<upstream> [<branch>]] , que creo que podría responder mi pregunta a la primera parte.

Pero, lo peculiar de esto es que sé <> significa parámetro obligatorio, y [] significa parámetro opcional. En [<upstream> [<branch>]] , veo un parámetro obligatorio dentro de un parámetro opcional. ¿Qué significa esto?

¿De qué manera el parámetro <branch> agregado hace la diferencia?

Lo hace porque una rebase reproduce todos los commits entre upstream y branch.

  • git rebase -i HEAD^n significa todas las confirmaciones entre HEAD ^ n y la twig actual HEAD
  • git rebase -i <branch> HEAD (o git rebase -i <branch> ) significa todas las confirmaciones entre <branch> HEAD (que está aquí la twig ascendente) y la twig actual HEAD . Por ejemplo: git rebase -i origin/master HEAD : todos los commits aún no están presionados.

[<upstream> [<branch>]] significa que ambos parameters son opcionales .
Dado que git ha sido creado por el autor de Linux, consulte man-pages: convenciones para escribir páginas man de Linux

Los corchetes ( [] ) rodean arguments opcionales

Para git rebase , esos parameters opcionales son:

Si se especifica <branch> , git rebase realizará un git checkout <branch> automático de git checkout <branch> antes de hacer cualquier otra cosa. De lo contrario, permanece en la twig actual.

Si no se especifica <upstream> se branch.<name>.merge opciones upstream configuradas en branch.<name>.remote y branch.<name>.merge .
La twig actual se restablece a <upstream> . Esto tiene exactamente el mismo efecto que el git reset --hard <upstream> .

Con respecto a la convención <...> , ver por ejemplo " Utilidad Argumento Sintaxis ":

Los nombres de los parameters que requieren sustitución por valores reales se muestran a continuación:

 <parameter name> 

Los corchetes angulares se usan para la agrupación simbólica de una frase que representa un único parámetro y las aplicaciones conformes no deben includelos en los datos enviados a la utilidad.

Finalmente, un ref no es un tipo de blob.
Una reference es (ver " Git Internals – Referencias de Git ") una reference a un valor de SHA1.
Un blob representa un contenido almacenado en un git repo. Ver " Git Internals – Git Objects – Object storage ".