Actualmente tengo tres archivos modificados en mi directorio de trabajo. Sin embargo, quiero que uno de ellos se restablezca al estado HEAD.
En SVN, usaría svn revert <filename>
(seguido de svn update <filename>
si fuera necesario) pero en Git debería usar git reset --hard
. Sin embargo, este comando no puede funcionar en un solo archivo.
¿Hay alguna forma en Git para descartar los cambios en un solo archivo y sobrescribirlo con una nueva copia HEAD?
git checkout
a continuación está la respuesta. En git, "revertir" es algo que le haces a un commit. "Revertir" reproduce el inverso de una confirmación histórica en su directorio de trabajo, para que pueda hacer una nueva confirmación que "deshaga" la confirmación revertida. Creo que este es un punto frecuente de confusión para las personas que vienen a git desde svn.Respuestas:
Puede usar el siguiente comando:
... que actualizará tanto la copia de trabajo
my-file.txt
como su estado en el índice con la de HEAD.--
básicamente significa: tratar cada argumento después de este punto como un nombre de archivo . Más detalles en esta respuesta . Gracias a VonC por señalar esto.fuente
HEAD~1
para indicar el penúltimo commit.HEAD
si está a la cabeza de la rama actual - vea norbauer.com/rails-consulting/notes/…reset
comando (como se dice) "no puede hacer un restablecimientocheckout
completo con rutas", y luego por qué el comando no se usa (no se puede?) Para restablecer todo el conjunto? (Me refiero a por qué se ha diseñado así.)git checkout
: "Sobrescribir rutas en el árbol de trabajo reemplazándolas por los contenidos en el índice o en el <tree-ish>". Es decir, si<tree-ish>
se omite, cualquier contenido en el índice se utilizará para actualizar el árbol de trabajo. Esto puede o no diferir de HEAD.Restablecer a la cabeza:
Para restablecer un solo archivo a HEAD:
Tenga en cuenta que
@
es la abreviatura deHEAD
. Una versión anterior de git puede no admitir la forma corta.Restablecer al índice:
Para restablecer un solo archivo al índice , suponiendo que el índice no esté vacío, de lo contrario a HEAD:
El punto es que, para estar seguro, no desea omitir el comando
@
o no hacerlo, aHEAD
menos que solo quiera restablecer el índice .fuente
man bash
página También se menciona en esta respuesta: unix.stackexchange.com/a/187548/142855--
se usa para decirle al programaI've finished specifying "options", and from here on, everything will be a positional argument.
. Convencionalmente, las "opciones" son los tokens como los--recursive
que pueden aparecer en cualquier orden, o incluso combinarse en su forma abreviada, como conrm -rf
. Por el contrario, los "argumentos posicionales" se parecen mucho más a los argumentos pasados a una función en un lenguaje de programación: su posición en la lista de tokens define qué hará exactamente el programa con ellos (a menudo son nombres de archivos).--
elimina la ambigüedad de cuál es cuál.Para volver a upstream / master do:
fuente
Desde Git 2.23 (agosto de 2019) puede usar
restore
( más información ):Lo anterior se restaurará
MyFile
elHEAD
(la última confirmación) en la rama actual.Si desea obtener los cambios de otra confirmación, puede retroceder en el historial de confirmación. El siguiente comando obtendrá
MyFile
dos confirmaciones anteriores a la última. Ahora necesita la opción-s
(--source
) ya que ahora usamaster~2
y nomaster
(el predeterminado) a medida que restaura la fuente:¡También puede obtener el archivo de otra sucursal!
fuente
La referencia a HEAD no es necesaria.
git checkout -- file.js
es suficientefuente
puede usar el siguiente comando para restablecer un solo archivo
Lista todos los archivos modificados para obtener
path_to_file/filename
con el siguiente comandofuente
Puede usar el siguiente comando:
git reset -- my-file.txt
que actualizará tanto la copia de trabajo de
my-file.txt
cuando se agrega.fuente
Puede usar el siguiente comando:
Si tiene una rama con el mismo nombre de archivo, debe usar este comando:
fuente
Una manera simple, fácil y práctica de sacarte del agua caliente, especialmente si no estás tan cómodo con git:
Ver el registro de su archivo
git log myFile.js
commit 1023057173029091u23f01w276931f7f42595f84f Autor: kmiklas Fecha: martes 7 de agosto 09:29:34 2018 -0400
JIRA-12345 - Refactor con nueva arquitectura.
Nota hash de archivo:
1023057173029091u23f01w276931f7f42595f84f
Mostrar el archivo usando el hash. Asegúrate de que sea lo que quieres:
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js
Redirigir archivo a una copia local
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js
Haga una copia de seguridad de su archivo actual.
cp myFile.js myFile.bak.js
Abra ambos archivos en su editor de texto favorito.
vim myFile.js
vim myFile.07aug2018.js
Copie y pegue el código de myFile.07aug2018.js en myFile.js y guárdelo.
Comprometerse y empujar myFile.js
Vuelva a ver el registro y confirme que su archivo esté correctamente en su lugar.
Dígale a sus clientes que tomen lo último, felizmente véanlo funcionar con la versión anterior en su lugar.
No es la solución más sexy o más centrada en git, y definitivamente un reinicio / reversión "manual", pero funciona. Requiere un conocimiento mínimo de git y no perturba el historial de confirmaciones.
fuente