Pregunta Mueva el puntero de la rama a una confirmación diferente sin pagar


Para mover el puntero de rama de una rama desprotegida, se puede usar git reset --hard mando. Pero, ¿cómo mover el puntero de la rama de una rama no pagada para señalar una confirmación diferente (manteniendo todas las demás cosas como una rama remota rastreada)?


554
2018-03-29 10:37


origen


Respuestas:


nótese bien Si simplemente quieres mover un rama a otro compromiso, el   La forma más fácil es

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

como se detalla por la respuesta de Chris Johnsen.

Puedes hacerlo por referencias arbitrarias. Así es como mover 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>

Puedes elegir liendres sobre el mensaje de reflog si lo deseas, creo que branch -f uno es diferente de la reset --hard uno, y este no es exactamente ninguno de ellos.


368
2018-03-29 10:38



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

772
2018-03-15 18:47



También puedes pasar git reset --hard una referencia de compromiso.

Por ejemplo:

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

Me parece que hago algo como esto semi-frecuentemente:

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

120
2017-07-11 19:39



Solo para enriquecer la discusión, si quieres moverte myBranch rama a su corriente cometer, simplemente omita el segundo argumento después -f

Ejemplo:

git branch -f myBranch


Generalmente hago esto cuando rebase mientras estás en un estado HEAD Independiente :)


20
2017-08-10 08:44



En gitk --all:

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

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

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


Incluso si eres un adicto a la línea de comandos como yo, git gui y gitk están bastante bien diseñados para el subconjunto de uso de git que permiten. Recomiendo mucho usarlos para lo que son buenos (es decir, poner selectivamente trozos en / fuera del índice en git gui, y también solo cometer. (Ctrl-s para agregar un firmado: línea, ctrl-enter para confirmar) .)

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

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


10
2017-10-13 12:16



los 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 a la que desea que se mueva el puntero de la rama (puntero nuevo):
    • Haga clic derecho, "Crear rama en esta versión"
    • Al lado de "Rama", ingrese el nombre de la rama para mover (rama-puntero-a-mover)
    • En "Base encendida", verifique que el nuevo puntero sea correcto
    • Marque "Force"
    • De acuerdo

enter image description here

enter image description here


6