your you what track the that specific previous pick made helps from discarded commits change are another and git git-branch

git - you - what is the command to pick a commit from a specific branch and move it to another branch



Mueve el puntero de la rama a una confirmaciĆ³n diferente sin pagar (6)

Para mover el puntero de rama de una rama git reset --hard , se puede usar el comando git reset --hard . Pero, ¿cómo mover el puntero de rama de una rama sin extracción para apuntar a una confirmación diferente (manteniendo todas las demás cosas como la rama remota rastreada)?


NB: Si simplemente desea mover una rama a otra confirmación, la forma más fácil es

git branch -f branch-name new-tip-commit

según lo detallado por la respuesta de Chris Johnsen .

Puedes hacerlo por referencias arbitrarias. Así es como se mueve un puntero de rama:

git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>

La forma general:

git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>

Puede seleccionar las nits sobre el mensaje de reflexión si lo desea. Creo que la branch -f es diferente de la reset --hard , y esto no es exactamente ninguno de ellos.


En gitk --all

  • Haga clic derecho en el compromiso que desea
  • -> crear nueva rama
  • ingrese el nombre de una sucursal existente
  • presione regresar en el cuadro de diálogo que confirma la sustitución de la rama antigua de ese nombre .

Tenga en cuenta que volver a crear en lugar de modificar la rama existente perderá la información de la rama de seguimiento . (Esto generalmente no es un problema para casos de uso simples en los que solo hay un control remoto y su sucursal local tiene el mismo nombre que la rama correspondiente en el control remoto. Vea los comentarios para obtener más detalles, gracias @mbdevpl por señalar este inconveniente).

Sería genial si gitk tuviera una función donde el cuadro de diálogo tuviera 3 opciones: sobrescribir, modificar existente o cancelar.

Incluso si normalmente eres un adicto a la línea de comandos como yo, git gui y gitk están muy bien diseñados para el subconjunto de uso de git que permiten. Recomiendo encarecidamente usarlos para lo que son buenos (es decir, organizar de forma selectiva trozos dentro y fuera del índice en git gui, y también simplemente cometer). (Ctrl-s para agregar una línea de cierre de sesión, ctrl-enter para cometer .)

gitk es ideal para realizar un seguimiento de algunas sucursales mientras ordena los cambios en una buena serie de parches para enviar en sentido ascendente, o cualquier otra cosa en la que necesite realizar un seguimiento de lo que está en el medio con múltiples sucursales.

Ni siquiera tengo un explorador de archivos gráfico abierto, pero me encanta gitk / git gui.


La solución recomendada git branch -f branch-pointer-to-move new-pointer en TortoiseGit :

  • "Git Show log"
  • Marque "Todas las ramas"
  • En la línea en la que desea que se mueva el puntero de rama a (nuevo-puntero):
    • Haga clic derecho, "Crear rama en esta versión"
    • Junto a "Rama", ingrese el nombre de la rama a mover (rama-puntero a mover)
    • Debajo de "Base On", verifica que el nuevo puntero sea correcto
    • Marcar "fuerza"
    • De acuerdo


Solo para enriquecer la discusión, si desea mover la rama myBranch a su confirmación actual , simplemente omita el segundo argumento después de -f

Ejemplo:

git branch -f myBranch

Generalmente hago esto cuando vuelvo a rebase mientras rebase en un estado de HEAD rebase :)


También puede pasar git reset --hard una referencia de confirmación.

Por ejemplo:

git checkout branch-name git reset --hard new-tip-commit

Encuentro que hago algo como esto con cierta frecuencia:

Asumiendo esta historia

$ git log --decorate --oneline --graph * 3daed46 (HEAD, master) New thing I shouldn''t have committed to master * a0d9687 This is the commit that I actually want to be master # Backup my latest commit to a wip branch $ git branch wip_doing_stuff # Ditch that commit on this branch $ git reset --hard HEAD^ # Now my changes are in a new branch $ git log --decorate --oneline --graph * 3daed46 (wip_doing_stuff) New thing I shouldn''t have committed to master * a0d9687 (HEAD, master) This is the commit that I actually want to be master


git branch -f branch-name new-tip-commit