ver tag oneline modificados log archivos git merge

git - tag - ¿Cómo puedo fusionar muchas confirmaciones, pero dejar una?



git ver archivos modificados (5)

Supongamos que tengo esta rama de función "foo". Ahora quiero fusionarlo de nuevo en el maestro, pero he agregado un código de depuración que no quiero en el maestro.

El código de depuración está en su propia confirmación, por lo que podría usar git cherry-pick en cada confirmación y omitir este compromiso. Pero eso va a ser bastante tedioso.

¿Hay alguna "selección inversa" que hace esto, o una combinación interactiva?


A pesar de lo que otros SCMs usan para significar, en git , git revert es una elección inversa.



Otra idea es agregar la confirmación revertida de la que tiene el código de depuración y fusionarla en su rama principal. Luego eliminamos ese compromiso extra en la rama 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úrate de que tu árbol de trabajo esté limpio. Primero crea la confirmación revertida. Luego, combínalo en maestro. Luego reinicie el puntero de rama de la rama foo al padre de la confirmación revertida, por lo que vuelve a estar en su estado original.

Si no le gusta usar el git reset , puede crear una bifurcación temporal donde crea la confirmación revertida. Al final, eliminas la rama temporal.


Use la base de datos interactiva para eliminar las confirmaciones que no desea.

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

git rebase -i master

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

Después de volver a basar, simplemente tire foo-merge en master:

git checkout master git pull . foo-merge


Use rebase interactivo:

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

Eso abrirá algo como esto en tu $ 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, lo que debes hacer es simplemente eliminar la línea que contiene la confirmación de depuración, escribir el archivo y cerrar el editor, y git te dirá algo como:

Successfully rebased and updated refs/heads/master.

Ahora puedes simplemente fusionarte en esa rama para dominar.

ACTUALIZACIÓN: Se debe tener en cuenta que la alteración del historial con rebase solo debería ocurrir en sucursales privadas. Si esta rama ha estado expuesta al público, use git revert según lo propuesto por otro respondedor.