2011-10-18 14 views
20

Tengo un git repo con una rama, además del maestro. Quiero que esa rama sea la maestra, sobrescribiendo por completo al maestro. Obviamente podría hacer una fusión, pero esto generará muchos conflictos, y me parece mucho trabajo resolverlos cuando sé que SIEMPRE quiero el archivo de la rama adicional, no del maestro.Git: ¿posible hacer una rama en el maestro, ignorando cualquier conflicto de fusión?

¿Es posible convertir una rama en principal, o hacer una fusión y decirle a git que siempre favorezca el archivo de una rama sobre la otra?

¡Gracias de antemano!

Respuesta

6

Si usted es el único desarrollador que accede a este repositorio y no se comparte con otros desarrolladores, es muy fácil hacerlo creando nuevas sucursales. Antes de comenzar, asegúrese de que su repositorio esté limpio (todas las modificaciones se han registrado en la rama actual).

Hacer una copia de seguridad de su antigua rama principal:

git checkout master 
git branch oldMaster 

Eliminar viejo maestro y crear nuevo maestro:

git checkout topicBranch 
git branch -D master 
git branch master 

Si su alojamiento en el repositorio en un servidor remoto, tendrá que actualizar el control remoto:

git push --force remoteName master:master 

IMPORTANTE: Si otros desarrolladores han estado extrayendo de su repositorio , este método generará errores para ellos la próxima vez que saquen de su repositorio o que empujen a su repositorio.

0

Todavía no soy un experto en git, pero parece que desea que el comando rebase:

git checkout branch_name 
git rebase master 
git checkout master 

Parece que esta voluntad de auto-fusionar todos los cambios en su maestría en el punto en el que' re branch diverged from master, luego vuelva a aplicar los cambios actuales a master ontop de esos cambios (para que no tenga que fusionarse).

Por supuesto, si solo desea sobrescribir completamente el maestro, creo que debería poder insertar esa rama en el depósito maestro si usa la opción de fuerza. Algo como esto:

git push --force origin branch_name 

A continuación, el mando a distancia tendrá todos los cambios de la rama en la rama principal, y se puede tirar de ella hacia fuera ...

git checkout master 
git pull --force origin 
23

Puede hacer esto en una disparo con el comando de reinicio:

git checkout master 
git reset --hard topicBranch 

Un restablecimiento completo hará que la bifurcación actual apunte a la confirmación dada. Esto descartará cualquier compromiso en el maestro que no esté ya en la rama de tema; ellos no serán fusionados

También se aplica la misma advertencia para las rebases: no haga esto si ya ha enviado la rama maestra a cualquier repositorio compartido con otros desarrolladores.

+1

+1, pero probablemente debería agregar la advertencia habitual de que 'git reset --hard' descarta todos los cambios no confirmados. –

+0

¿Podría poner la advertencia la próxima vez, no la última, lol – Helzgate

+2

Tenía que dar un paso más.Git pensó que había cambios para tirar, cuando hice un git pull tuve conflictos de fusión. En cambio, hice 'git push -f' para forzar el impulso –

Cuestiones relacionadas