Cambiar los nombres de las ramas en git

103

Puede haber más de una forma de hacer esta pregunta, así que aquí tienes una descripción del problema. Estaba trabajando en master y comprometí algunas cosas y luego decidí que quería dejar ese trabajo en espera. Hice una copia de seguridad de algunas confirmaciones y luego me ramifiqué antes de comenzar mi trabajo de mierda. Prácticamente esto funciona bien, acabo de tener una rama diferente como mi rama de desarrollo principal. Me pregunto cómo podría cambiar las cosas, así que estoy trabajando en el maestro nuevamente, pero no tiene mi trabajo basura y dice que el trabajo está en una rama diferente.

Algunas formas en que esto se podría preguntar / resolver: ¿Cómo cambio el nombre de mi rama maestra a otra cosa y luego cambio el nombre de otra a maestra? ¿Cómo hago una copia de seguridad del maestro y luego hago que todas las confirmaciones de las que he hecho copias de seguridad estén en una rama diferente?

¡Gracias por todas las respuestas (rápidas)! Están todos bien.

Daniel Benamy
fuente

Respuestas:

144

Además de los otros comentarios, puede encontrar útil el modificador -m (mover) a git-branch. Puede cambiar el nombre de su antiguo maestro a otra cosa, luego cambiar el nombre de su nueva rama a maestro:

git branch -m master crap_work
git branch -m previous_master master
Greg Hewgill
fuente
Dependiendo de su flujo de trabajo, es posible que también desee cambiar cualquier referencia de rama en .git / config. Cambié [branch "crap_work"]para leer [branch "master"]para que el maestro aún se sincronizara con origin/master. Por supuesto, el estado de los dos repos era tal que esto todavía tenía sentido.
Epónimo
3
Esto no cambia el nombre de las ramas en el repositorio remoto, solo en el repositorio local.
smohadjer
1
@smohadjer Para cambiar el nombre de los mandos a distancia, haría git push -uf origin mastery git push -u origin crap_work.
zyy
31

Creo que debería considerar una estrategia de desarrollo diferente para prevenir problemas como este. Uno que parece funcionar mejor para mí es nunca hacer desarrollo directamente en mi rama maestra. Independientemente de los cambios que realice, siempre creo una nueva rama para el nuevo código:

git checkout -b topic / topic_name master

A partir de ahí, puedo enviar los cambios a los repositorios públicos:

git push pu topic / topic_name

o, finalmente, simplemente fusionarlo de nuevo con mi rama maestra:

git checkout master && git merge topic / topic_name

Si realmente necesita volver a un punto anterior en el tiempo y configurarlo como su maestro, puede cambiar el nombre de la rama actual a otra cosa y luego consultar una versión anterior para que sea su maestro:

 git branch -m master basura
 git co -b maestro old_sha1_value
Brian Riehman
fuente
Esa es una buena política. Y ahora que lo pienso, he visto que se practica en otros lugares. Gracias.
Rimian
14

Comience master, cree una rama llamada in-progress, luego restablezca mastera una confirmación anterior.

$ git branch in-progress
$ git reset --hard HEAD^
Ted Percival
fuente
1
No veo ninguna razón para que esto haya sido rechazado. Lo hice yo mismo unas cuantas veces, antes de aprender sobre la rama -my darme cuenta de que maestro no estaba vinculado de forma inmutable como el nombre permanente de una rama.
skiphoppy
7

Esto es relativamente sencillo:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch
olliej
fuente
1
Sí, el último es completamente opcional: git checkout -bcrea una rama y la activa.
BorisOkunskiy
0

Esto establecerá su maestro en cualquier punto en un solo paso:

git checkout -B master new_point
Penghe Geng
fuente