Tengo dos ramas, maestro y dev. Siempre trabajo en desarrollo y solo verifico el código en la rama maestra una vez que ha sido aprobado para uso de producción. Cuando lo hago, tengo que hacer lo siguiente:
git checkout master
git merge dev
git checkout dev
Eso es muy detallado, y como lo hago con frecuencia, me gustaría minimizarlo. ¿Hay algún comando git que pueda usar para fusionar mi desarrollador de sucursal actual con el otro maestro de sucursal sin tener que verificar primero la rama maestra? Tal vez algo como:
git merge dev to master
sería grandioso. Miré a través de la documentación de git y no vi nada.
git
version-control
Chris
fuente
fuente
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Respuestas:
1) Agregue un alias remoto para su repositorio local, por ejemplo:
(O en ventanas
git remote add self C:\path\to\your\repository
)2. Presione hacia el autocontrol remoto, por ejemplo:
fuente
/path/to/your/repository
es la ruta a su árbol de trabajo, es decir, no incluya el.git
directorio. Además, esto debería ser evidente: el control remoto tendrá que actualizarse si mueve el repositorio.git remote add self file:///c/projects
solo vuelve con las notas de usodev
) y luego empujar el commit de fusión usandogit push self dev:master
..
trabajado bien para mí:git push . head:master
.La respuesta actual más votada por @zerome es buena, pero es un poco innecesariamente detallada.
En la base de tu repositorio de git puedes hacer esto:
git push . dev:master
Una solución más generalizada que funcionaría en cualquier parte del árbol sería:
fuente
git push . dev:master
¡simplifiqué mucho mi vida! La mejor respuesta hasta ahora, graciasgit push origin dev:master
merge --no-ff
comportamiento con esto?git remote add self file:///myRepo
?Su mejor opción sería usar un alias, colocado en su gitconfig global (
~/.gitconfig
):para que pueda invocarlo desde cualquier repositorio como
fuente
&&
, no;
, fallaría la fusión y no trataría de cambiar. Esperemos que el usuario sea lo suficientemente inteligente como para ver el mensaje "fusión fallida" y tratarlo.merge-to = "!f() { export tmp_branch=
rama git | grep '*' | tr -d '*'; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, no me permite tener que escribir en la rama estoy actualmente, por lo que si desea fusionardev
enmaster
y estoy endev
este momento yo sólo escribogit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git checkout $ 1 && git merge --no-ff $ tmp_branch && git checkout $ tmp_branch; unset tmp_branch;}; f"Una pequeña modificación del alias Jefromi que no requiere que escriba la rama actual.
Así que lo utilice como:
git merge-to dev
.Esto cambiará a la
dev
rama, se fusionará con CURRENT y luego volverá a cambiar.Por ejemplo, suponiendo que esté en la
master
rama, fusionará el maestro en dev y seguirá estando en el maestro.Definitivamente va a mis archivos de puntos :)
fuente
Esto es viejo, pero ...
Combinando las soluciones de @ kevin-lyda y @ dmytrii-nagirniak anteriores. Este alias fusiona la rama actual en la rama especificada. Utiliza el método de control remoto con y usa comandos git para obtener el contexto.
Para ser utilizado como:
fuente
Para fusionar la rama actual en otra rama sin verificar la otra rama:
Combinación de avance rápido
Esto es realmente facil. Por definición, una combinación de avance rápido simplemente significa que el puntero de la rama se mueve hacia adelante en el árbol de confirmación. Entonces, todo lo que necesita hacer es simular eso:
Consejo: Si hiciste una
git fetch
y tienes nuevas confirmacionesorigin/master
, puedes mover lamaster
rama sin retirar usando:Fusionar mediante merge commit
Esto no siempre es posible. Para crear una confirmación de fusión, debe realizar una operación de fusión. Y para realizar una operación de fusión, debe tener confirmaciones en la otra rama que no están en la rama actual.
Si tiene commits en la
master
rama que no están en ladev
rama, puede:Explicación:
Fusionarse
master
en la rama temporal e iniciar el editor de mensajes de confirmación. Si desea que el compromiso de fusión se vea como si hubiera fusionado ladev
ramamaster
, edítelo a partir de esto:a esto:
Consejo: puede usar en
-m "Merge branch 'dev'"
lugar de-e
ser más rápido.master
puntero de rama para apuntar a la confirmación de fusión.dev
sucursal.Esto todavía toca su árbol de trabajo, pero mínimamente. No hace retroceder el árbol hasta el estado original
master
solo para traer los cambios de desarrollo una vez más. Puede que a algunos no les importe, pero para otros puede ser importante.fuente
Muchas veces vienes de la rama en la que te gustaría fusionar la rama actual. En ese caso podrías hacer:
git co - && git merge @{-1}
por ejemplo:
fuente
Mi solución es similar a las otras respuestas, con las siguientes diferencias:
set -ex
para que se imprima cada comando y si el comando falla, la función sale de inmediatogit merge
: git merge
que garantiza que la finalización de tabulación funcione con algunas configuraciones de shell (por ejemplo,gitfast
de oh-my-zsh)fuente