Estoy escribiendo algunos scripts para mi flujo de trabajo de Git.
Necesito restablecer otra rama (existente) a la actual, sin pagar.
Antes de:
CurrentBranch: commit A
OtherBranch: commit B
Después:
CurrentBranch: commit A
OtherBranch: commit A
Equivalente de
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Nota --soft
: no quiero afectar el árbol de trabajo).
es posible?
Respuestas:
Los flujos de trabajo que describe no son equivalentes: cuando realiza
reset --hard
, pierde todos los cambios en el árbol de trabajo (es posible que desee hacerloreset --soft
).Lo que necesitas es
fuente
refs/heads/
…git push . current:other
. Esto funciona sinrefs/heads
(/ cc @elliottcable) y también evita que actualice la rama extraída. Tenga en cuenta que es posible que deba pasar -f (o usar+current:other
) si la actualización no es un avance rápido.-m 'some text'
argumento para registrar el motivo de la actualización de la referencia que se mostrará mediante ungit reflog OtherBranch
comando, como "sincronizado con CurrentBranch". Puede ser útil recordar por qué lo hizo más tarde.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
ogit push . CurrentBranch OtherBranch
cuándo podría usar el mucho más limpio (IMO) en sugit branch -f OtherBranch CurrentBranch
lugar? (Vea mi respuesta en git branch -f a continuación)Establecer
otherbranch
para apuntar a la misma confirmación quecurrentbranch
ejecutandoLa
-f
opción (forzar) dice quegit branch
sí, realmente quiero sobrescribir cualquierotherbranch
referencia existente con la nueva .De la documentación :
fuente
fatal: Cannot force update the current branch.
cuando intento hacer esto.otherbranch
retirado. Esta pregunta SO se trata específicamente de restablecer otra rama a una confirmación diferente (es decir, no restablecer la rama extraída). Lo que quiere hacer es restablecer la rama actual congit reset targetbranch
para forzar que se apunte a la rama actualtargetbranch
. Agregue--hard
también para forzar el árbol de trabajo a ese contenido. O--soft
dejar el índice solo y solo cambiar la rama en sí.branch -f
podía hacer eso.Puedes sincronizar con este comando tus ramas en cualquier momento
También sin -f reemplaza este conjunto de comandos
Puede ser útil cuando no necesita enviar todos sus archivos en CurrentBranch y, por lo tanto, no puede cambiar a otras ramas.
fuente
-f
opción a menos que sea absolutamente inevitable. Funciona bien sin él en mi caso.