En mi repositorio git que está rastreando un repositorio svn, he realizado varias ediciones en un solo archivo.
Ahora quiero revertir esos cambios (como svn revert), pero solo partes del archivo.
Quiero poder ver las diferencias en el archivo, descartar (revertir) los cambios que no quiero y retener los cambios que quiero.
el
git add -i
El comando parece tener una opción para hacerlo, pero todavía no quiero organizar esto.
fuente
Creo que puedes hacerlo de la manera más sencilla con:
Desde la página del manual:
fuente
a
opción en modo parche para descartar un archivo completo, perogit checkout -- <file>
funciona como se esperaba. Alguien sabe por qué?Usted podría funcionar
git diff
en el archivo, guarde el diff resultante, editarlo para eliminar los cambios que no desea guardar, a continuación, ejecute a travéspatch -R
de deshacer los diferenciales restantes.fuente
git diff
muestra todo el archivo como modificado. Esto generalmente ocurre cuando ha guardado el archivo usando diferentes finales de línea de lo que era anteriormente. Esto también provocaría elpatch
rechazo del archivo de revisión. ¿Suena eso como lo que pudo haber sucedido?Parece que quieres
Entonces puedes usar
para ver qué cambio se realizará antes de comprometerse (ya que revertir es solo un compromiso en una dirección hacia adelante que replica el inverso de un cambio en el pasado)
Si estuvieras con un repositorio Git puro, podrías, dependiendo de tus objetivos, utilizar rebase interactivo (
git rebase -i
) para volver al commit que no te gustó y editar el commit retroactivamente para que los cambios que no te gusten nunca ocurran , pero eso es generalmente solo si SABES que nunca querrás volver a verlo.fuente
Al volver a leer la pregunta, parece que desea revertir los cambios que están en su árbol de trabajo y no los cambios que se han confirmado anteriormente, pero algunas de las otras respuestas hacen que parezca que mi lectura puede ser incorrecta. ¿Puedes aclarar?
Si los cambios están solo en su copia de trabajo, la forma más fácil de hacerlo es organizar los cambios que desea conservar:
Luego, descarte los cambios que no desea conservar revisando la versión de índice:
Luego, desarme los cambios si aún no los desea:
Esta receta solo revierte los cambios seleccionados en el archivo (o los archivos que especifique) y no crea ninguna confirmación temporal que luego deba revertirse.
Si desea aplicar selectivamente solo algunos de los cambios realizados en confirmaciones anteriores, primero puede restablecer un archivo a un estado confirmado anterior:
A continuación, puede seguir la receta anterior
git add -i <file>
para organizar los cambios que desea conservar,git checkout -- <file>
descartar los cambios no deseados ygit reset -- <file>
'desestabilizar' los cambios.fuente
Las opciones de línea de comando que se describen en las respuestas aquí son útiles cuando el archivo está en un servidor al que estoy accediendo a través de un terminal ssh. Sin embargo, cuando el archivo está en mi máquina local, prefiero la siguiente manera:
Abra el archivo en el editor de netbeans (que viene con soporte git). Netbeans pone marcas rojas / verdes / azules en los números de línea para indicar dónde se eliminó / agregó / modificó (respectivamente).
Al hacer clic con el botón derecho en cualquiera de estas marcas, tiene la opción de deshacer ese cambio. Además, puede hacer clic derecho en las marcas rojas y azules para ver la versión anterior en una ventana emergente.
fuente