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:
master
-
seotweaks
(creado originalmente delmaster
)
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.