2010-07-20 8 views
14

Digamos que tengo la revisión A de hace mucho tiempo e hice un cambio deseable.Con Git, ¿es posible volver a aplicar una revisión de ancestro?

Luego, más adelante, tuve revisión B que hizo muchos cambios a gran cantidad de archivos, incluyendo acabando con el cambio A.

Ahora, mucho más tarde, quiero volver a solicitar la revisión A. ¿Hay una buena forma de hacer esto? Los comandos de fusión y selección de cereza parecen omitir las revisiones que son antepasados, y no veo ninguna bandera para ignorar los ancestros.

Siempre hay diff/apply, pero ¿son realmente la mejor manera? Parece que esto podría ser "con pérdidas" (pasando por el formato de parche intermedio) y podría no permitir que Git use todas las herramientas que normalmente tiene a su disposición ... pero esta es una corazonada desinformada de mi parte.

+2

'git | git | sustantivo Brit., Informal una persona desagradable o despreciable. Esto significa que: todo es posible con git. –

Respuesta

-2

Puede usar git checkout $ REVISION para volver a su revisión (Commit). Entonces deberías crear una nueva rama desde allí.

git.cmd branch YOURCOMMIT 

Puede utilizar el pico para obtener las confirmaciones que necesita para su nueva sucursal.

+0

No entiendo. No quiero una nueva sucursal; Quiero volver a aplicar una revisión del pasado, dentro de la misma rama. – mackstann

+0

Tengo ese punto. Pero es más fácil hacer esto con una nueva rama. Puedes borrarlo de manera segura, una vez que hayas terminado tu proceso de pico y lo hayas fusionado nuevamente. La ramificación es barata y fácil en git. –

+0

Pero, ¿cómo obtengo la revisión en el maestro en el futuro cuando estoy en mi rama anterior al pasado? – mackstann

23

git cherry-pick A hará exactamente lo que quiera. No busca ancestros: solo busca ver qué cambios ya se han aplicado.

He aquí un ejemplo:

git cherry-pick A 
git cherry-pick A 
git cherry-pick A 

sólo creará una nueva comprometerse (como máximo). Los comandos segundo y tercero no son operativos, ya que los cambios de A ya se han aplicado. Sin embargo,

git cherry-pick A 
git cherry-pick B 
git cherry-pick A 
git cherry-pick B 

creará cuatro nuevas confirmaciones. La primera y tercera compromete a los dos para hacer lo mismo, mientras que el segundo y el cuarto se revertirá el primer y tercer (incluso si cometen B hicieron otros cambios que volver A.) En otras palabras, esto es lo mismo que

git cherry-pick A 
git revert --no-edit HEAD 
git revert --no-edit HEAD 
git revert --no-edit HEAD 

Espero que esto ayude.

Cuestiones relacionadas