ver remotas remota ramas rama listar cambiar git merge git-branch

remotas - listar ramas git



¿Cómo reemplazar la rama maestra en Git, enteramente, de otra rama? (5)

¿Qué pasa con el uso de git branch -m para cambiar el nombre de la rama maestra a otra, y luego cambiar el nombre de seotweaks a la rama maestra? Algo como esto:

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

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

Posible duplicado:
Haz de la rama Git actual una rama maestra

Tengo dos sucursales en mi repositorio Git:

  1. master
  2. seotweaks (creado originalmente del master )

seotweaks con la intención de fusionarlo rápidamente de nuevo en master . Sin embargo, eso fue hace tres meses y el código en esta rama es de 13 versiones por delante del master .

Se ha convertido efectivamente en nuestra rama maestra de trabajo, ya que todo el código en master está 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 rama master con aquellos en seotweaks ?

Podría simplemente eliminar todo en master y fusionar, pero esto no parece la mejor práctica.


Dado que seotweaks se creó originalmente como una rama del master , una buena idea es volver a fusionarlo. Sin embargo, si se encuentra en una situación en la que una de sus sucursales no es realmente una sucursal del master o su historial es tan diferente que solo desea eliminar la rama master en favor de la nueva sucursal en la que ha estado trabajando. 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 de su repositorio remoto. Además, esto no causará tiempo de inactividad ni condiciones de carrera, como puede ocurrir al eliminar maestro:

git push origin :master


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

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

El resultado debe ser su maestro ahora es esencialmente seotweaks.

( --strategy=ours -s ours es corto para --strategy=ours )

De los documentos sobre la estrategia ''nuestra'':

Esto resuelve cualquier número de cabezas, pero el árbol resultante de la fusión es siempre el de la rama actual, ignorando efectivamente todos los cambios de todas las demás ramas. Está destinado a ser usado para reemplazar el antiguo historial de desarrollo de las ramas laterales. Tenga en cuenta que esto es diferente de la opción -Xours a la estrategia de combinación recursiva.


Descubrí que esta es la mejor forma de hacerlo (tuve un problema con mi servidor que no me permitía eliminar).

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

git config receive.denyDeleteCurrent ignore

En su 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 origin :

git config receive.denyDeleteCurrent true

Gracias al autor de la publicación del blog http://www.mslinn.com/blog/?p=772


Puede renombrar / eliminar el maestro en el control remoto, pero esto será un problema si muchas personas han basado su trabajo en la rama del maestro remoto y han retirado esa rama en su repositorio local.
Puede que este no sea el caso aquí, ya que todos parecen estar trabajando en '' seotweaks '' de seotweaks .

En ese caso puedes:
git remote --show puede no funcionar. (Haga un git remote show para verificar cómo se declara su control remoto en su repositorio local. Asumiré '' origin '')
(Respecto a GitHub, house9 comenta: "Tuve que hacer un paso adicional, haga clic en el botón '' Admin '' en GitHub y establezca la '' Default Branch '' en otra cosa que no sea '' master '', luego vuelva a colocarla '''')

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 tirar mientras el maestro se elimina en el control remoto, sus intentos fallarán ("no hay tal referencia en el control remoto")
  • cuando el maestro se vuelve a crear en el control remoto, un tirón intentará fusionar ese nuevo maestro en su maestro local (ahora antiguo): muchos conflictos. De hecho, necesitan reset --hard su maestro local a la rama remota / maestra que van a buscar, y olvidarse de su maestro actual.