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:
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.
Simplemente elimine su rama maestra local y vuelva a crearla así:
git branch -D master
git checkout Origin/master -b master
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.
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
Si está utilizando Atlassian SourceTree app, puede usar la opción de reinicio en el menú contextual.
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.
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
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.
Para confirmaciones locales que no se están enviando, también puede usar git rebase -i
para eliminar o aplastar una confirmación.
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.
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>
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>