2010-01-29 16 views
92

En git, guardo mis cambios. ¿Es posible que pueda crear un parche con lo que escondo? ¿Y aplicar ese parche en algún otro repositorio (el de mi compañero de trabajo)?¿Cómo puedo formatear el parche con lo que guardo?

Sé 'git format-patch -1' pero creo que es por lo que he cometido. Pero estoy buscando lo mismo para los cambios que escondí?

¿Y cómo puedo aplicar un parche en otro repositorio?

Respuesta

108

Claro, git stash show apoya esta:

git stash show -p 
+1

Tengo una pregunta relacionada acerca de aplicar un parche. Digamos que mi parche toca varios archivos. ¿Hay alguna manera de aplicar el parche "interactivamente"?¿Elegir a qué archivos del parche debo aplicar el parche? ¿Puedo hacer eso? – silverburgh

+1

@silverburgh: Eché un vistazo rápido a través de 'man patch' y no vi ninguna opción para la aplicación de parches interactivos. Sin embargo, dado que los archivos parche son archivos de texto sin formato, por lo general lo que uno haría sería editar el parche en un editor de texto para recortar las partes relevantes para aplicar con 'parche'. Alternativamente, si está aplicando el parche en otro repositorio de Git, puede aplicarlo todo y luego selectivamente archivos 'git checkout' que no desea cambiar ('git checkout' con un nombre de archivo descarta los cambios no registrados). –

+0

@silverburgh puede restringir el conjunto de archivos parcheados usando los parámetros "--exclude" y "--include" de git apply. – Kelvin

15

Uso

$> git stash list 
[email protected]{0}: WIP on master: 84fx31c Merged with change to /public/ 
[email protected]{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter 

para obtener una lista de sus cosas poco escondido. Git realmente crea objetos de compromiso cuando guardas.

Son compromisos como todo lo demás. Usted puede comprobar a cabo en una rama:

$> git checkout -b with_stash [email protected]{0} 

continuación, puede publicar esta rama y colega puede combinar o cereza-escoge que cometió.

10

Las soluciones anteriores no funcionarán para datos binarios. La siguiente añadir soporte para él:

git stash show [email protected]{0} -p --binary 

Edición

Nota: Sólo quería añadir un comentario a las respuestas anteriores, pero mi reputación no es suficiente.

28

Esta respuesta proporciona información sobre cómo guardar el parche y aplicarlo donde desee utilizarlo.

para guardar la salida en un archivo:

git stash show -p --color=never > my-patch-name.patch 

Compruebe parche se ve bien:

git apply --stat my-patch-name.patch 

Verifique que no haya errores:

git apply --check my-patch-name.patch 

Aplicar el parche

git apply my-patch-name.patch 
+0

Éste trabajó para mí con archivos de código de texto sin formato, pero tuve que dar cuenta del espacio en blanco. Verificar parche se ve bien: 'git aplicar --check --ignore-espacio-cambio --ignore un espacio en blanco mi-patch-name.patch' aplicar el parche: ' git aplican --ignore- space-change --ignore-whitespace my-patch-name.patch' –

1

Creo que este podría ser uno de los errores de Git recientemente. ya no tienes que parchar los cambios que escondiste. puedes simplemente aplicar tus cambios escondidos en una rama a otra.

decir en la rama A ha ocultado algunos cambios, denominados stash @ {1}.

ahora cambiar a la rama B. sólo se puede hacer:

$git stash apply [email protected]{1} 

esto se aplica a sus cambios de la rama A a B. rama

Cuestiones relacionadas