tag repositorio rama que crear como cambiar git git-reset

repositorio - ¿Por qué Git no puede hacer restablecimientos duros/blandos por ruta?



que es head en git (4)

La pregunta de cómo ya está answered , explicaré por qué .

Entonces, ¿qué hace el reinicio de git ? Dependiendo de los parámetros especificados, puede hacer dos cosas diferentes:

  • Si especifica una ruta, reemplaza los archivos coincidentes en el índice con los archivos de una confirmación (HEAD por defecto). Esta acción no afecta en absoluto al árbol de trabajo y generalmente se usa como opuesto a git add.

  • Si no especifica una ruta, mueve la cabeza de bifurcación actual a una confirmación especificada y, junto con eso , restablece opcionalmente el índice y el árbol de trabajo al estado de esa confirmación. Este comportamiento adicional está controlado por el parámetro de modo:
    --soft : no toques el índice y el árbol de trabajo.
    --mezclado (predeterminado): restablece el índice pero no el árbol de trabajo.
    --hard : restablece el índice y el árbol de trabajo.
    También hay otras opciones, consulte la documentación de la lista completa y algunos casos de uso.

    Cuando no especifica una confirmación, su valor predeterminado es HEAD, por lo que git reset --soft no hará nada, ya que es un comando para mover la cabeza a HEAD (a su estado actual). git reset --hard , por otro lado, tiene sentido debido a sus efectos secundarios , dice mueva la cabeza a HEAD y reinicie el índice y el árbol de trabajo en HEAD.

    Creo que ahora debería estar claro por qué esta operación no es para archivos específicos por su naturaleza: en primer lugar, se pretende mover un cabezal de bifurcación, restablecer el árbol de trabajo y el índice es una funcionalidad secundaria.

$ git reset -- <file_path> puede restablecer por ruta.

Sin embargo, $ git reset (--hard|--soft) <file_path> reportará un error como el siguiente:

Cannot do hard|soft reset with paths.


Porque no tiene sentido (otros comandos ya proporcionan esa funcionalidad), y reduce el potencial de hacer lo incorrecto por accidente.

Se acaba de realizar un "restablecimiento completo" de una ruta con git checkout HEAD -- <path> (revisando la versión existente del archivo).

Un restablecimiento suave para una ruta no tiene sentido.

Un reset mixto para una ruta es lo que git reset -- <path> hace.


Puede lograr lo que está tratando de hacer usando git checkout HEAD <path> .

Dicho esto, el mensaje de error proporcionado no tiene sentido para mí (ya que el git reset funciona bien en los subdirectorios), y no veo ninguna razón por la cual el git reset --hard no debería hacer exactamente lo que estás pidiendo.


git reset --soft HEAD ~ 1 filename deshace el commit pero los cambios permanecen en local. nombre de archivo podría ser - para todos los archivos comprometidos