¿Cómo puedo dejar de comprometer los últimos commits de una twig en un repository simple?

Esta pregunta tiene que ver con rebobinar las confirmaciones de la twig principal. ¿Puedo usar un command similar de git reset --soft en una twig en el repository o debería intentar darle sentido a git revert ?

En última instancia, me gustaría rebobinar dos twigs por dos o tres confirmaciones (no solo la última) en el repository desnudo.

Todavía no tengo claro dónde está el repository. Dices que está vacío, pero debes tener un lugar no desnudo en algún lugar también.

Si solo quieres rebobinar las sucursales locales, entonces quieres usar git reset . Entonces, si tienes una beta una twig local, puedes rebobinarla así:

 $ git checkout beta $ git reset --hard HEAD~2 

Esto soltará 3 commits: HEAD , HEAD~1 y HEAD~2 . Estos recogerán la basura en aproximadamente 90 días para que pueda recuperarlos si es necesario.

Si tiene un repository remoto con nombre de origin (que está vacío) y desea rebobinar la ramificación allí , puede hacerlo mediante un impulso forzado . Digamos que presionaste 3 commits en beta antes de que estén listos. Puede mantenerlos en su proyecto local pero eliminarlos del repository remoto remoto de esta manera:

 $ git push -f origin beta~3:beta 

Esto puede ser duro para otros que usan ese repository, pero parece que estás de acuerdo con eso.

Si solo tiene un repository desnudo, entonces puede restablecer forzosamente la sucursal de la siguiente manera:

 $ git branch -f beta beta~3 

Nota: esto también funciona para el primer caso de rebobinado de sucursales locales. De nuevo, esto no es amistoso para cualquiera que use este repository.

Depende de lo que quieras hacer. git revert generará nuevas confirmaciones en su repository para invertir los cambios realizados por las confirmaciones seleccionadas. Esto es agradable desde una perspectiva de seguimiento de cambios: puede ver qué se revirtió y por qué, y siempre puede reconsiderar su decisión más adelante.

Puede ejecutar git reset (sin --soft , que solo tiene sentido en una copy de trabajo) para restablecer el repository a un estado anterior. Esto descarta los commits después de la confirmación seleccionada, por lo que perderás esa historia para siempre. Si hay personas con copys de trabajo remotas del repository, de repente encontrarán sus copys de trabajo fuera de synchronization (y pueden reintroducir inadvertidamente los cambios cuando ejecuten git push ).

Si es tu propio repository y no lo estás compartiendo con nadie, git reset está bien. De lo contrario, git revert es probablemente la mejor opción, ya que deja un rastro en el historial del repository e interactúa bien con copys de trabajo remotas.