web-dev-qa-db-esp.com

Tirar los compromisos locales en Git

Debido a una mala selección de cerebros, mi repositorio local de Git tiene actualmente cinco confirmaciones por delante de Origin y no está en buen estado. Quiero deshacerme de todos estos compromisos y empezar de nuevo.

Obviamente, eliminar mi directorio de trabajo y volver a clonarlo lo haría, pero descargar todo de GitHub de nuevo parece una exageración, y no es un buen uso de mi tiempo.

Tal vez git revert es lo que necesito, pero no quiero terminar 10 commit delante del Origen (o incluso seis), incluso si el código vuelve al estado correcto. Solo quiero fingir que la última media hora nunca pasó.

¿Hay un comando simple que hará esto? Parece un caso de uso obvio, pero no encuentro ningún ejemplo de ello.


Tenga en cuenta que esta pregunta es específicamente acerca de confirma , no acerca de:

  • archivos sin seguimiento
  • cambios sin etapas
  • cambios en escena, pero no comprometidos.
1155
David Moles

Si sus confirmaciones en exceso solo son visibles para usted, puede simplemente hacer git reset --hard Origin/<branch_name> para volver a donde está el Origen. Esto restablecerá el estado del repositorio a la confirmación anterior y descartará todos los cambios locales.

Hacer un git revert hace que new se comprometa a eliminar old commit de una manera que mantiene la historia de todos sanos.

1999
Ben Jackson

Simplemente elimine su rama maestra local y vuelva a crearla así:

git branch -D master
git checkout Origin/master -b master
223
Ramon Zarazua B.

Tratar:

git reset --hard <the sha1 hash>

para restablecer tu cabeza a donde quieras estar. Usa gitk para ver en qué compromiso quieres estar. Puedes hacer reset dentro de gitk también.

165
Anders Zommarin

Eliminar la confirmación más reciente:

git reset --hard HEAD~1

Elimine la confirmación más reciente, sin destruir el trabajo que ha realizado:

git reset --soft HEAD~1

60
James L.

Si está utilizando Atlassian SourceTree app, puede usar la opción de reinicio en el menú contextual.

enter image description here

45
muruge

En su intento de rama:

git reset --hard Origin/<branch_name>

Valide la reversión (al estado, sin confirmaciones locales), usando "git log" o "git status" por lo tanto.

31
parasrish

git reset --hard @{u} * elimina todos los cambios locales en la rama actual, incluidos los confirmaciones. Me sorprende que nadie haya publicado esto aún, teniendo en cuenta que no tendrá que buscar el compromiso para volver o jugar con las sucursales.

* Es decir, restablecer a la rama actual en @{upstream}— comúnmente Origin/<branchname>, pero no siempre

18
Kevin Chen

Para ver/obtener el ID de SHA-1 de la confirmación, también desea volver

gitk --all

Para volver a ese compromiso

git reset --hard sha1_id

!Nota. Todas las confirmaciones que se hicieron después de esa confirmación serán eliminadas (y todas sus modificaciones al proyecto). Así que primero es mejor clonar el proyecto en otra rama o copiar en otro directorio.

12
Nicholas

Para confirmaciones locales que no se están enviando, también puede usar git rebase -i para eliminar o aplastar una confirmación.

8
Nikhil Katre

Tuve una situación en la que quise eliminar un compromiso que no se presionó, pero el compromiso fue anterior a otro. Para ello, he usado el siguiente comando

git rebase -i HEAD~2 -> rebautizará las dos últimas confirmaciones

Y usé 'drop' para la firma de confirmación que quería eliminar.

7
Robert

Eliminar archivos sin seguimiento (cambios locales no confirmados)

git clean -df

Eliminar de forma permanente todas las confirmaciones locales y obtener la última confirmación remota

git reset --hard Origin/<branch_name>
1
ElasticCode
git reset --hard <SHA-Code>

Esto será útil si ha cometido algunos errores en su copia local que desea asegurarse de que no se transfieran a su sucursal remota por error.

El código SHA se puede obtener al ver la versión web de su panel de control de git para el último compromiso en la rama.

De esta manera puede sincronizarse con la última confirmación en la rama.

Puede hacer git pull después de haber completado con éxito el restablecimiento completo para confirmar que no hay nada nuevo que sincronizar, es decir, puede ver el mensaje.

Tu sucursal está actualizada con Origin/<Branch Name>

0
Sameer Ashraf