git rebase un solo compromiso

¿Hay alguna forma de volver a establecer la base de una única confirmación de una sucursal en otra sucursal?

Así que tengo

-- -- -- -- -- (Master) \ -- -- -- -- -- XX (Feature-branch) 

y todo lo que quiero hacer es volver a establecer la base del último commit de Feature-branch en master y rollback Feature-branch one commit.

 -- -- -- -- -- XX (Master) \ -- -- -- -- -- (Feature-branch) 

¿Cómo puedo hacer eso?

Puedes seleccionar XX para dominar.

 git checkout master git cherry-pick <commit ID of XX> 

Y elimine la última confirmación de la twig de características con git reset.

 git checkout Feature-branch git reset --hard HEAD^ 
 git rebase --onto master branch~1 branch 

Esto dice "rebase el range de commits entre last-before-branch y branch (es decir, XX commit) en la punta de la twig master"

Después de que esta sugerencia de branch operación se mueva, confirme XX , por lo que desea volver a configurarla con

 git checkout branch git reset --hard branch@{1}^ 

Que dice "restablecer la sugerencia de twig a la confirmación antes de su estado anterior"

Entonces, una selección de cereza es una solución más simple …

La respuesta de @Charles es correcta. De todos modos terminé usando esto muchas veces, sobre todo para volver a establecer las configuraciones específicas en un proyecto

   * a8f9182 (HEAD -> producción) configuration de producción
   |  * configuration daa18b7 (pre) preproducción
   | /  
   |  * configuration local d365f5f (local)
   | /  
   * 27d2835 (dev) increíble nueva característica que salvará al mundo
 * |  56d2467 (maestro) aburrido estado de la técnica para el proyecto
 | /

que creo un nuevo command para ello:

 $ cat ~ / bin / git-rebaseshot 
 COMPRAR = $ 1
 DEST = $ {2: -HEAD}
 git rebase $ {COMMIT} ^ $ {COMMIT} --onto $ DEST

normalmente quiere autocomplete los nombres de las twigs para ese command, así que agréguele esta function (agregando a .bashrc o .profile):

 _git_rebaseshot () 
 { 
     __gitcomp_nl "$ (__ git_refs)"
 }

git autocomplete lo searchá

puedes usar este command así:

 # rebase config on prepro on actual HEAD $ git rebaseshot prepro # rebase config on local onto dev $ git rebaseshot local dev # rebase production config on master $ git rebaseshot pro master 

Cuando divide las funciones correctamente, las posibilidades son infinitas.

 * a8f9182 (HEAD -> postgres) Configuración de BBDD
 * configuration local a8f9182 (local)
 * configuration de nivel de logging a8f9182 (debugging)
 * a8f9182 (dev) nueva característica
 |

Supongo que esto es lo que a las personas les gusta hacer.

este command funcionará de todos modos con cualquier sha / ref que proporciones:

 $ git rebaseshot <Feature branch> master $ git rebaseshot <commit of XX> master 

Es bastante simple de hacer en realidad. La solución es hacer una rebase interactiva y "descartar" todas las confirmaciones que no desee include en la rebase.

git rebase -i <target_branch> donde target_branch es la twig sobre la que desea volver a establecer la base

Luego, editarás el file que se abre y pick las confirmaciones que deseas y drop (o d para abreviar) todas las confirmaciones que no quieras llevar.