2008-08-22 14 views
98

Puede haber más de una forma de hacer esta pregunta, por lo que aquí encontrará una descripción del problema. Estaba trabajando en master y comprometido algunas cosas y luego decidí que quería poner 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, ahora tengo una rama diferente como mi principal rama de desarrollo. Me pregunto cómo podría cambiar las cosas, así que estoy trabajando en master de nuevo, pero no tiene mi trabajo basura y dijo que el trabajo está en una rama diferente.Cambie los nombres de las sucursales en git

Algunas formas en que esto podría ser preguntado/resuelto: ¿Cómo cambio el nombre de mi rama principal a otra cosa y luego renombro algo más para dominar? ¿Cómo hago una copia de seguridad del maestro y luego hago que todas las confirmaciones de las que he hecho una copia de seguridad pasen a estar en una rama diferente?

Gracias por todas las respuestas (rápidas)! Todos están bien.

Respuesta

140

Además de los otros comentarios, puede encontrar útil el modificador -m (mover) a git-branch. Se podría cambiar el nombre de su antiguo amo a otra cosa, a continuación, cambiar el nombre de su nueva rama de dominar:

git branch -m master crap_work 
git branch -m previous_master master 
+1

¡Esto también funciona al cambiar el nombre de su sucursal actual! :) – Tarrasch

+0

Dependiendo de su flujo de trabajo, es posible que también desee cambiar cualquier referencia de sucursal en .git/config. Cambié '[branch" crap_work "]' para leer '[branch" master "]' para que el master todavía se sincronice con 'origin/master'. Por supuesto, el estado de los dos repos era tal que aún tenía sentido. – Eponymous

+1

Esto no cambia el nombre de las ramas en el repositorio remoto, solo en el repositorio local. – smohadjer

8

Esto es relativamente fácil:

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 
+1

Yeap, el último es completamente opcional - 'git checkout -b' crea una la rama ** y ** lo activan. – incarnate

15

Inicio en master, crear una rama llamada in-progress, restablezca master a cometer una anterior.

$ git branch in-progress 
$ git reset --hard HEAD^ 
+1

No veo ninguna razón para que esto haya sido rechazado. Lo hice algunas veces, antes de aprender sobre la ramificación -m y me di cuenta de que el maestro no estaba inmutablemente atado como el nombre permanente de una rama. – skiphoppy

32

creo que usted debe considerar una estrategia de desarrollo diferente para evitar problemas de este tipo. Uno que parece funcionar mejor para mí es nunca hacer el desarrollo directamente en mi rama principal. Independientemente de los cambios que estoy haciendo, siempre se crea una nueva rama para el nuevo código:

 
git checkout -b topic/topic_name master 

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

 
git push pu topic/topic_name 

o, eventualmente, simplemente fusionar de nuevo con mi rama principal:

 
git checkout master && git merge topic/topic_name 

Si realmente se necesita para volver a un punto de más edad en el tiempo y establecer que, como su maestro, puede cambiar el nombre de la rama actual a otra cosa y luego echa un vistazo una versión más antigua que sea su maestro:

 
git branch -m master junk 
git co -b master old_sha1_value 
+0

Esa es una buena política. Y ahora que lo pienso, lo he visto practicado en otro lugar. Gracias. – Rimian

0

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

git checkout -B master new_point 
Cuestiones relacionadas