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