¿Cómo mover compromisos a otra twig?

Me gustaría trasladar mis últimos commits de master a una twig propia.

El tree en mi PC se ve así:

W (some branch) / X1--X2--X3--X4--Y--Z1--Z2 (master) 

Me gustaría que se vea así:

  W (some branch) / X1--X2--X3--X4 (master) \ Y--Z1--Z2 (my new branch) 

Sin embargo, el tree en GitHub se ve así:

  W (some branch) / X1--X2--X3--X4--Y (master) 

Eso es lo que vi como una solución para mover los últimos commits a otra twig:

 git checkout master git branch my_new_branch git reset <commit_id> 

Mi pregunta es: ¿sería capaz de presionar con éxito a GitHub después de mover los commits a una nueva twig y, de ser así, requeriría hacer algo más que estos tres commands?

(Supongo que <commit_id> es el nombre del object de X4 …)

Esos commands de hecho te terminarán con lo que quieres a nivel local. (Es posible que desee utilizar git reset --hard para mantener el tree de trabajo y el índice igual al commit al que está restableciendo, pero como de costumbre, tenga mucho cuidado de que el git status esté limpio antes de usar ese command).

Si luego intentas enviar master a GitHub, te dirá que todo está actualizado, porque el master en GitHub es uno de los que se compromete más adelante. Puede forzar el impulso, para que el maestro se restablezca en GitHub, pero eso es reescribir la historia pública, por lo que solo debe hacer eso si (a) usted es el único que habrá obtenido el master de GitHub o (b) puede dejar sus queueboradores saben qué hacer para que no vuelvan a fusionar accidentalmente a Y Si eso está bien, puede hacer lo siguiente:

  git push --force origin master 

… y luego master en GitHub será el mismo que tu versión local.

Debería funcionar pero necesitarás:

  • para push -f origin master (forzar el empuje, lo que generará problemas si alguien más ya ha clonado tu repository)
  • para presionar luego su nueva bifurcación (que luego encontrará el X4 sha1 sobre el cual se establecerá dicha nueva bifurcación).

Nadie ha mencionado que simplemente puedes elegir el compromiso en otra twig. De esta forma, su post de compromiso seguirá estando allí para usted.

Solo copie la identificación de revisión de su confirmación que desea mover. git log --oneline

Luego crea una nueva twig además de la antigua confirmación y git checkout -b "$newBranchName" HEAD~$n a ella: git checkout -b "$newBranchName" HEAD~$n (HEAD ~ $ n significa la enésima confirmación) o git checkout -b "$newBranchName" $formerRevsion

Ahora solo tienes que elegir el commit deseado: git cherry-pick $revision

La confirmación anterior seguirá estando en la otra twig, pero puedes arreglarla con la rebase. Regrese a su antigua twig y use rebase: git rebase -i HEAD~$n

Simplemente elimine la línea de confirmación de la confirmación seleccionada y su twig se actualizará sin ella. Tienes que usar git push -f porque las revisiones de todos los commit rebasados ​​han cambiado.