¿Cómo puedo combinar muchas confirmaciones, pero dejarlo?

Supongamos que tengo esta rama de la función foo. Ahora quiero volver a fusionarlo con el maestro, pero agregué un código de depuración que no necesito dominar.

El código de depuración está en su propia confirmación, por lo que puedo usar git cherry-pick para cada confirmación y dejar que se confirme. Pero será bastante agotador.

¿Hay algún "selector de cereza inversa" que haga esto o una combinación interactiva?

74
26 окт. establecido por Dave Vogt el 26 de octubre 2009-10-26 16:13 '09 a las 16:13 2009-10-26 16:13
@ 5 respuestas

Utilice reinicio en línea:

 git rebase -i SHA-OF-FIRST-COMMIT-IN-BRANCH 

Esto abrirá algo como esto en su $ EDITOR:

  pick 8ac4783 folders and folders pick cf8b1f5 minor refactor pick 762b37a Lots of improvement. Folders adn shit. pick 3fae6e1 Be ready to tableview pick b174dc0 replace folder collection view w/ table view pick ef1b65b more finish pick ecc407f responder chain and whatnot pick 080a847 play/pause video pick 6719000 wip: movie fader pick c5f2933 presentation window fade transition # Rebase e6f77c8..c5f2933 onto e6f77c8 # # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # 

Entonces, solo desea eliminar la línea que contiene el compromiso de depuración, escribir el archivo y cerrar el editor, y git le dirá algo así como líneas:

 Successfully rebased and updated refs/heads/master. 

Ahora simplemente puede unirse en este hilo para la gestión.

ACTUALIZACIÓN: se debe tener en cuenta que el cambio en el historial utilizando rebase debe ocurrir solo en sucursales privadas. Si este hilo estaba abierto al público, use git revert , como lo sugiere otro respondedor.

54
26 окт. Respuesta dada a Harry Vangberg el 26 de octubre. 2009-10-26 16:16 '09 a las 16:16 2009-10-26 16:16

Aunque otros SCM se utilizan para referirse a, en git , git revert es la elección de cereza inversa.

border=0
67
26 окт. Respuesta dada por Charles Bailey el 26 de octubre. 2009-10-26 16:16 '09 a las 16:16 2009-10-26 16:16

Otra idea es agregar un compromiso cancelado con el código de depuración y fusionarlo en su rama principal. Posteriormente, eliminamos esta solución adicional en las ramas de foo.

 git checkout foo git revert COMMIT_REF_WITH_DEBUG_CODE git checkout master git merge foo git checkout foo git reset --hard HEAD~1 

Asegúrese de que el árbol de trabajo esté limpio. Primero crea el commit cancelado. Entonces combínalo en un maestro. Luego restablezca el puntero de rama de la rama foo al elemento principal de la confirmación devuelta, para que vuelva a su estado original.

Si no le gusta usar git reset , puede crear una rama temporal en la que creará un compromiso cancelado. Al final se borra la rama temporal.

7
26 июля '11 в 21:30 2011-07-26 21:30 Paul Pladijs da la respuesta el 26 de julio de 2011 a las 21:30 2011-07-26 21:30

Usa el reinicio en línea para eliminar las confirmaciones que no quieras.

En la nueva rama "foo-merge" creada a partir de "foo":

 git rebase -i master 

Una vez que esté en el modo de edición de arreglos, elimine las líneas que contienen confirmaciones de depuración, guarde y cierre el editor.

Después de reiniciar, simplemente tira foo-merge en el maestro:

 git checkout master git pull . foo-merge 
2
27 окт. respuesta dada por Yang Zhao 27 de octubre 2009-10-27 10:06 '09 a las 10:06 am 2009-10-27 10:06

Tuve éxito

 git rebase -p --onto SHA^ SHA 

Donde SHA es la solución que desea eliminar.

a través de http://sethrobertson.github.io/GitFixUm/fixup.html#remove_deep

0
08 апр. respuesta dada por michaeljoseph 08 abr. 2016-04-08 12:47 '16 a las 12:47 2016-04-08 12:47

Otras preguntas sobre tags o Haz una pregunta