¿Cómo des-escenario de forma interactiva a un trozo particular en git?

106

En git, si tengo un par de trozos del mismo archivo organizados en mi índice, ¿cómo puedo eliminar el escenario de uno de ellos de forma interactiva?

¿Existe alguna alternativa a desestabilizar todo el archivo y luego volver a programar los trozos que quiero conservar, o deshacer manualmente los cambios en la copia de trabajo y luego agregar interactivamente esos cambios deshechos?

Andrew Grimm
fuente

Respuestas:

135

Prueba git reset --patch filename; esto debería hacer lo contrario de git add --patch, de acuerdo con la documentación . La forma corta -ptambién funciona para ambos comandos.

Aasmund Eldhuset
fuente
No creo que mi versión lo tenga (es 1.6.3.3), pero parece la respuesta correcta.
Andrew Grimm
2
En ese caso (y asumiendo que no puede actualizar por alguna razón), le sugiero que use git stash save --keep-indexpara guardar y restablecer los cambios de la copia de trabajo actual. Luego, puede restablecer su archivo y deshacer los cambios que no desea. Si copia el archivo en una ubicación temporal primero, puede usarlo diffpara guardar los cambios que deshaga. Luego, puede volver a agregar el archivo (no es necesario un agregado interactivo, ya que guardó los otros cambios que no le interesaban). Úselo git stash poppara recuperar los cambios anteriores y diffpara aplicar los cambios que deshizo. Bastante engorroso ... :-(
Aasmund Eldhuset
The short form -p also works for both commands... ¿Te refieres git reset -p filename?
Nawaz
1
@Nawaz: Eso es correcto: git add -p filenamecambia la etapa de forma selectiva a partir de ese archivo y git reset -p filenamela desactiva de forma selectiva. También existe git checkout -p -- filename, que le permite descartar selectivamente los cambios de un archivo. Advertencia: cada uno de addy resetse puede utilizar para deshacer el otro de los dos, pero si utiliza esta forma de checkoutpara descartar un cambio, no podrá recuperarlo.
Aasmund Eldhuset
2

git guitiene una interfaz gráfica de usuario decente para escenificar o desmontar de forma interactiva trozos o líneas. Hay clientes GUI más bonitos / mejores, pero git guies liviano, integrado y multiplataforma (lin, win, mac).

https://git-scm.com/docs/git-gui

Simplemente haga clic con el botón derecho en un trozo para montar o quitar el escenario. Para las líneas, resalte las líneas primero, luego haga clic derecho.

Wisbucky
fuente
-1

GitX tiene una interfaz de usuario agradable para desestabilizar fragmentos de un archivo: ingrese la descripción de la imagen aquí

El cliente oficial no se ha mantenido por un tiempo, pero una bifurcación en GitHub con más funciones es popular en algunos círculos. ( entrada de blog al respecto )

John Douthat
fuente
1
Para los usuarios de Windows, Git Extensions tiene una interfaz de usuario igualmente agradable.
Aasmund Eldhuset
4
También lo hace el integrado git gui, excepto que no estoy seguro de si usaría la palabra "agradable";)
MatrixFrog
1
SourceTree (Windows + Mac) también tiene una buena interfaz de usuario para esto.
chrnola
Debo mencionar los clientes gráficos de Git más recientes ahora: GitKraken es hermoso y admite esto (aunque ahora viene con una tarifa considerable para uso comercial). El escritorio de GitHub de GitHub es gratuito, hermoso y es compatible con macizos de preparación y eliminación de etapas. GitKraken y GitHub Desktop son multiplataforma, pero ninguno es de código abierto.
jdgregson