¿Existe un comando que le permita deshacer parcialmente los cambios en un archivo (o archivos) en el directorio de trabajo?
Suponga que ha editado mucho un archivo pero se da cuenta de que desea deshacer algunos de los cambios al estado comprometido, pero no los otros cambios.
Estoy imaginando una opción para git checkout
que funcione de manera muy similar git add -p
, es decir, revisa el archivo trozo a trozo y pregunta si desea conservarlo o no.
revert
le permite seleccionar qué cambios dentro de un archivo se revierten? Sinceramente preguntando, ya que solo tengo experiencia con CVS y Git. En Git,git checkout -- path/to/file
hay un solo comando que revierte todos los cambios en ese archivo, pero no es el mismo que el anterior.git checkout --patch
ygit reset --patch
que funcionan comogit add --patch
en la última versión de git.--
generalmente indican el final del análisis de opciones y que cualquier argumento que venga después debe interpretarse literalmente. Esto significa que no tendría que agregar./
antes ningún nombre de archivo que comience con un signo menos, si el nombre del archivo viene después--
.git checkout --patch
la diferencia parece estar al revés. Los símbolos menos están AGREGANDO texto a mi copia de trabajo, y los símbolos más están ELIMINANDO líneas de mi copia de trabajo.Con la versión de git> = 1.7.1 puedo
No estoy seguro de cuándo se introdujo esta función.
fuente
git reset -p
para desescender selectivamente los cambios del índice / área de ensayo. Tampoco sé de mi cabeza en qué versión de Git se introdujo esto.git checkout $file
revierte el estado del archivo$file
al último estado comprometido. Creo que puede usargit checkout SHA-1 -- $file
para revertir el archivo a la confirmación identificada por SHA-1.fuente
¿Cuántas confirmaciones necesitas para volver y seleccionar? Si es solo uno, tal vez tome una rama justo antes, revise el archivo que comprometió y luego use
git add -p
para agregarlo como lo quería. Luego puede volver a donde estaba y verificar el archivo de su rama temporal.es decir:
Otras alternativas incluyen volver atrás y editar la confirmación con
git rebase -i
(marcar la confirmación comoedit
, luego hacer unagit reset HEAD^
y rehacer la confirmación cuando se vuelve a colocar en el shell).Si los cambios entre los que necesita seleccionar se distribuyen en una serie de confirmaciones, puede ser mejor extraerlos como parches (o un parche que los cubra todos) y editar manualmente el parche, eliminando los cambios que desea conservar. y alimentar el residuo en
git apply --reverse
.fuente