Cómo evitar las confirmaciones duplicadas después de que mis cambios se combinan en la twig principal en Gerrit

Estamos utilizando Gerrit en nuestro proyecto y nos esforzamos por mantener una historia lineal al volver a basar siempre nuestros cambios locales además de los nuevos cambios entrantes.

Después de haber asignado mis cambios a mi twig maestra local, los presiono en el control remoto:

git push origin HEAD:refs/for/master 

Esto crea una revisión de Gerrit para mi compromiso. Y cuando ejecuto el git status , dice que mi sucursal local está por delante del origen / principal en una confirmación, porque mi nueva confirmación aún no se ha fusionado en la twig maestra remota. Tenga en count que puede haber otras confirmaciones por parte de otros desarrolladores que no se hayan fusionado en la twig maestra remota. Esto significa que no puedo volver a establecer la base de mi confirmación sobre ellos porque todavía no están en la twig remota.

Cuando mi confirmación se ha fusionado en la twig maestra remota, antes o después de cualquier otra confirmación, y después de ejecutar el git fetch origin , ejecutar el git status dice que mi twig principal local y el remoto han divergido, porque la versión local de mi confirmación (su sha-1) es diferente de la versión remota. Básicamente, mi confirmación se duplica bajo un Sha-1 diferente. Luego tengo que ejecutar git reset --hard HEAD~1 para eliminar la versión local de mi commit y luego git merge origin/master para avanzar mi branch local para include los nuevos cambios desde la twig master remota. Hay alguna manera de evitar esto?

Una buena forma de evitar esto es usar rebase lugar de merge . Para hacer esto, cambie la configuration de su proyecto en la página /admin/projects/YOUR_PROJECT estableciendo el valor "Rebase si es necesario" para la input "Enviar tipo".

Después de enviar la confirmación de Gerrit puede actualizar su repository local usando git pull --rebase o git fetch origin ; git rebase origin/master git fetch origin ; git rebase origin/master .

Para ir más allá, puede crear una sola twig local por confirmación, luego empujar esta twig hacia refs/for/master y volver a establecer la base de la misma manera que antes. Tiene la ventaja de no crear dependencia en diferentes commits.