Pregunta ¿Cómo reemplazar la rama principal en git, por completo, desde otra rama? [duplicar]


Posible duplicado:
Cambiar la rama actual a master en git 

Tengo dos ramas en mi git repo:

  1. dominar
  2. seotweaks (creado originalmente del maestro)

yo creé seotweaks con la intención de fusionarlo de nuevo rápidamente en master, sin embargo, eso fue hace 3 meses y el código en esta rama es 13 versiones antes de master, se ha convertido efectivamente en nuestra rama maestra de trabajo como todo el código en master es más o menos obsoleto ahora.

Muy mala práctica, lo sé, lección aprendida.

¿Sabes cómo puedo reemplazar todos los contenidos de la master rama con aquellos en seotweaks?

Podría borrar todo en master y fusionarse, pero esto no parece una buena práctica.


1285
2018-05-19 03:06


origen


Respuestas:


Debería poder utilizar la estrategia de fusión "nuestra" para sobrescribir el maestro con sekweaks como este:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

El resultado debería ser que tu maestro ahora es esencialmente sekweaks.

(-s ours es la abreviatura de --strategy=ours)

De los documentos sobre la estrategia 'nuestra':

Esto resuelve cualquier cantidad de encabezados, pero el árbol resultante de la fusión es siempre el del encabezado de bifurcación actual, ignorando todos los cambios de todas las otras ramas. Está destinado a ser utilizado para reemplazar el historial de desarrollo anterior de las ramas laterales. Tenga en cuenta que esto es diferente de la opción -Xours a la estrategia de fusión recursiva.


2238
2018-05-19 04:51



¿Qué hay de usar git branch -m para cambiar el nombre de la rama master a otra, y luego renombrar seotweaks branch to master? Algo como esto:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

Esto podría eliminar confirmaciones en el maestro de origen, compruebe su maestro de origen antes de ejecutar git push -f origin master.


370
2018-05-19 03:11



Puede cambiar el nombre / eliminar el maestro en el control remoto, pero esto será un problema si muchas personas han basado su trabajo en la rama principal remota y han retirado esa rama en su repositorio local.
Ese podría no ser el caso aquí ya que todos parecen estar trabajando en la sucursal 'seotweaks'.

En ese caso, puedes:
git remote --show puede no funcionar. (Hacer una git remote show para verificar cómo se declara su control remoto dentro de su repositorio local. Asumiré 'origin')
(Con respecto a GitHub, casa9 comentarios: "Tuve que hacer un paso adicional, haga clic en 'Admin'botón en GitHub y establecer el'Default Branch'a algo que no sea'master', luego vuelva a colocarlo después ")

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

Pero otra vez:

  • si otros usuarios intentan extraer mientras se borra el maestro en el control remoto, sus tiradas fallarán ("no such ref on remote")
  • cuando el maestro se recrea en el control remoto, un jalón intentará fusionar ese nuevo maestro en su maestro local (ahora viejo): muchos conflictos. Ellos realmente necesitan reset --hard su maestro local a la sucursal remota / maestra que recuperarán, y olvidarse de su maestro actual.

61
2018-05-19 03:57



ya que seotweaks se creó originalmente como una rama de master, la fusión es una buena idea. sin embargo, si se encuentra en una situación en la que una de sus ramas no es realmente una rama de un maestro o su historia es tan diferente que solo desea borrar la rama principal a favor de la nueva rama que ha estado haciendo el trabajo sobre usted puede hacer esto:

git push [-f] origin seotweaks:master

esto es especialmente útil si está recibiendo este error

! [remote rejected] master (deletion of the current branch prohibited)

y no está utilizando github y no tiene acceso a la pestaña "Administración" para cambiar la rama predeterminada para su repositorio remoto. además, esto no causará tiempo de inactividad o condiciones de carrera como puede encontrar al eliminar el maestro:

git push origin :master

21
2017-07-25 20:44



Encontré que esta es la mejor manera de hacerlo (tuve un problema con mi servidor que no me dejaba eliminar)

En el servidor que aloja el repositorio de origen, escriba lo siguiente desde un directorio dentro del repositorio:

git config receive.denyDeleteCurrent ignore

En tu estación de trabajo:

git branch -m master vabandoned                 # rename master on local
git branch -m newBranch master                  # locally rename branch newBranch to master
git push origin :master                         # delete the remote's master
git push origin master:refs/heads/master        # push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # push the old master to the remote

De vuelta en el servidor que aloja el repositorio de origen:

git config receive.denyDeleteCurrent true

crédito al autor de esta página

http://www.mslinn.com/blog/?p=772


1
2017-09-28 13:13