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 OtherBranchcomando, como "sincronizado con CurrentBranch". Puede ser útil recordar por qué lo hizo más tarde.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranchogit push . CurrentBranch OtherBranchcuándo podría usar el mucho más limpio (IMO) en sugit branch -f OtherBranch CurrentBranchlugar? (Vea mi respuesta en git branch -f a continuación)Establecer
otherbranchpara apuntar a la misma confirmación quecurrentbranchejecutandoLa
-fopción (forzar) dice quegit branchsí, realmente quiero sobrescribir cualquierotherbranchreferencia existente con la nueva .De la documentación :
fuente
fatal: Cannot force update the current branch.cuando intento hacer esto.otherbranchretirado. 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 targetbranchpara forzar que se apunte a la rama actualtargetbranch. Agregue--hardtambién para forzar el árbol de trabajo a ese contenido. O--softdejar el índice solo y solo cambiar la rama en sí.branch -fpodí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
-fopción a menos que sea absolutamente inevitable. Funciona bien sin él en mi caso.