¿Cómo puedo cambiar los puntos maestros de commit en git?

En git, he estado haciendo commits en la twig principal, cuando realmente debería haber estado trabajando en una twig de características. Quiero cambiar esto para que el maestro vuelva a donde comenzó, y lo que estaba en el maestro ahora está en una nueva twig. Básicamente, mi historial de commit se ve así:

A -- B -- C -- D -- E | | | master origin/master 

Y quiero que se vea así:

  master | A -- B -- C -- D -- E | | | new_branch origin/master 

¿Cómo puedo cambiar los puntos maestros?

  • esconde tu no comprometido: git stash
  • crea una nueva twig: git branch new_branch
  • restablecer maestro a origen / maestro: git reset --hard origin/master
  • revisa la nueva sucursal de nuevo: git checkout new_branch
  • Aplasta tus cambios: git stash pop

stash / unstash no es necesario si su tree de trabajo está limpio. solo asegúrate de que no haya cambios en tu tree de trabajo, porque esos se eliminarán cuando restablezcas –duro


otra posibilidad (más rápido, y sin la necesidad de almacenar y restablecer):

  • pagar una nueva sucursal: git checkout -b new_branch master
  • crea una 'nueva' twig maestra y apúntala a la confirmación de origen / máster: git branch -f master origin/master
 $ git checkout master $ git reset --hard <commit-id-for-master-to-sit-at> 

por ejemplo, intente esto

 $ mkdir example; cd example $ git init $ vi testFile.txt (now add "test commit 1" to line 1 of file) $ git add * $ git commit (add message "(+) 1st commit" to git commit) $ vi testFile.txt (now add "test commit 2" to line 1 of file) $ git add * $ git commit (add message "(+) 2nd commit" to git commit) $ vi testFile.txt (now add "test commit 3" to line 1 of file) $ git add * $ git commit (add message "(+) 3rd commit" to git commit) $ $ git tag final_head $ git reset --hard HEAD~1 

este ejemplo muestra mover el maestro a una confirmación diferente. Tenga en count que la label nos permite save el antiguo maestro, en el caso 🙂

Ve a .git / refs / heads / master que tiene el hash de master y cámbialo a lo que quieras. Uso gitg para encontrar rápidamente el hash de master y luego para verificar que el movimiento fue exitoso.

Como se describe aquí , pero aún más simple, no hay reinicios involucrados, solo crea una nueva twig donde estaba el maestro, luego elimina sin problemas el maestro, revisa nuevamente el lugar al que deseas mover el maestro y crea una nueva twig maestra allí:

 git stash git checkout -b old_master_was_here git branch -d master git checkout origin/master git checkout -b master 

Cree una nueva twig new_branch en HEAD actual (asumiendo HEAD = master), reinicie master en C y cambie a new_branch nuevamente (hablando en términos de SmartGit).