Volviendo a Git

He confirmado y promovido varios parches: A1 -> A2 -> A3 -> A4 (CABEZA)

Todos han sacado estos sets de cambios en su copy local.

Ahora queremos "retroceder" a A2, y continuar desarrollando desde allí, esencialmente descartando A3 y A4. ¿Cuál es la mejor manera de hacer esto?

Desde el directory raíz de su copy de trabajo solo haga

git checkout A2 -- . git commit -m 'going back to A2' 

Usar git revert para este propósito sería engorroso, ya que quieres deshacerte de toda una serie de commits y revert para deshacerlos de a uno por vez.

No quieres git reset tampoco. Eso simplemente cambiará su puntero de twig master : no queda ningún logging de la dirección equivocada. También es difícil coordinar: dado que la confirmación a la que ha cambiado el master no es un elemento secundario del puntero de bifurcación master del depósito remoto, fallará, a less que agregue -f (forzar) o elimine primero la bifurcación master en el depósito remoto. recrébelo empujando. Pero luego, todos los que intenten extraer tendrán la antigua historia en su twig master local, por lo que una vez que el origin/master diverja, git pull intentará realizar una combinación. Este no es el fin del mundo: pueden salir de esta situación haciendo git rebase --onto origin/master $old_origin_master_commit master (es decir, rebase sus confirmaciones locales hechas sobre el antiguo origin/master en la parte superior del nuevo origin/master ). Pero Git no sabrá hacer esto automáticamente, así que debes coordinar con cada queueborador. En resumen, no hagas eso.

Tirar esos commits probablemente tendrá algunos efectos negativos en cualquiera que saque de tu repository. Como otra opción, puede considerar crear una twig de desarrollo alternativa que comience en A2:

 A1 -> A2 -> A3 -> A4 (maestro / CABEZA)
       \
        -> B1 -> B2 (nuevo-maestro / CABEZA)

Hacer esto es tan simple como

 git branch nuevo maestro maestro ~ 2

Usted quiere git-revert y git-reset dependiendo de cómo quiera tratar A3 y A4. Para eliminar todo rastro de A3 y A4, use git-reset --hard . Para mantener A3 y A4 y registrar el hecho de que está revertiendo, use git-revert .

editar : la solución de git-checkout Aristóteles Pagaltzis es superior, aunque para pequeñas git-revert no veo ningún problema con git-revert . No obstante, pido votaciones futuras a la respuesta de Aristóteles Pagaltzis

Encontré git magic para ser un buen recurso para git.