/ / ¿Cómo agregar una ID de confirmación a una serie de selecciones de cereza? - git, gerrit

¿Cómo agregar un ID de confirmación a una serie de selecciones de cereza? - git, gerrit

Estoy tratando de contribuir a la germinación LineageOS.

Así que, esencialmente, escogí una variedad de confirmaciones de una rama del kernel ascendente ...

Solo ahora, ninguno de los commits seleccionados tiene una ID de cambio. Sé que puedo agregar manualmente uno con un enlace de confirmación y:

git commit --amend

Sin embargo, hay 834 más o menos confirmaciones ... También soy consciente de que podría ejecutar un rebase interactivo para aliviar un poco mi dolor mediante:

git rebase -i $FIRST_CP
# Change every commit from pick to edit
git commit --amend
git rebase --continue

Sin embargo, esto es casi tan malo como elegir una vez más cada confirmación.

Nota: yo no haga tengo acceso de administrador al servidor Gerrit, por lo que no puedo eliminar temporalmente el requisito de cambio de ID.

Estoy al límite de mi ingenio y esto realmente está poniendo un freno a mis contribuciones ... Espero que alguien tenga una mejor idea.

Addenum: También intenté fusionar la rama y esperar que fuera aceptada ... Sin embargo, no hay dados.

Respuestas

0 para la respuesta № 1

Tratar git filter-branch --msg-filter.

Digamos que tenemos el gancho para generar Change-Id en ~/commit-msgy ahora estamos en master.

#create an orphan branch "tmp" from "master".
git checkout --orphan tmp master
git commit -m "new root"

#cherry-pick all the commits from an upstream kernel branch.
git cherry-pick <all-the-commits>

#rewrite the commit message of every commit on "tmp"
git filter-branch --msg-filter "git log -1 --pretty=%B $GIT_COMMIT > msg.txt;~/commit-msg msg.txt;cat msg.txt"

#all the commits now have Change-Id
#cherry-pick all of them except the root to "master"
root=$(git log --pretty=%H --max-parents=0)
git checkout master
git cherry-pick $root..tmp

msg.txt se crea en .git-rewrite/ bajo el repositorio actual, y .git-rewrite/ se elimina automáticamente después de completar el comando. Así que vamos a ignorarlo.

El comando msg-filter simula el proceso de generar Change-Id. Creo que podría ser más elegante, pero funciona en mi prueba.


0 para la respuesta № 2

-n, --no-commit le permitirá elegir una o más confirmaciones existentes sin ninguna confirmación. Después de hacer esto, puede comprometer a todos los seleccionados con una ID de confirmación.