¿Cómo configuro la rama aguas arriba para empujar una rama local a magit?

11

Por lo que recuerdo, si estoy trabajando en una rama, por ejemplo, my-feature-branchsolía poder hacer esto desde el magit-statusmenú P Py luego seleccionar la rama remota de una lista que estaba origin/my-feature-branchen la parte superior. Esto funcionó muy bien.

Recientemente, a partir de esta discusión , pude hacer algo similar con P -u e(abrir magit-push-popup, configurar la --set-upstreambandera y usarlo een otro lugar), lo que me permitiría elegir de una lista de ramas que comienzan con origin/my-feature-branch. Esto funcionó bien para mí también. Sin embargo, incluso más recientemente, esto ya no funciona, y no he podido encontrar la mejor manera de establecer una rama ascendente.

Cuando uso P ela primera opción para que una rama empuje es origin/my-feature-branch, que es casi siempre lo que quiero. Sin embargo, no se establece origin/my-feature-branchcomo el flujo ascendente para mi sucursal local. El uso P ume permite elegir la rama ascendente, pero origin/my-feature-branchno está en la lista, y tengo que escribir origin/my-feature-branchsin completar la pestaña (sé que esto no es difícil, pero es propenso a errores de usuario y es más lento que la línea de comando).

¿Es esta la única forma de establecer una rama ascendente ahora, o me falta algo? He examinado otras discusiones y documentación relacionada con el tema, pero todas las fuentes que he encontrado parecen estar desactualizadas.

elethan
fuente
1
Creo que la <remote>/<branch>parte se dejó accidentalmente fuera de la solicitud (vea este comentario ). Mientras tanto, puede establecer magit-push-current-set-remote-if-missingen cero.
Kyle Meyer
Acabo de arreglar eso. Mi respuesta a continuación asume esa solución.
tarsius
Encontrado y solucionado algunos otros problemas relacionados. Probablemente tendrá que esperar unas horas para que Melpa se ponga al día antes de que todo lo que está debajo sea 100% correcto.
tarsius

Respuestas:

11

Hay varias formas de configurar el flujo ascendente, mientras empuja o no empuja al mismo tiempo.

Si magit-push-current-set-remote-if-missingno es nil(el valor predeterminado), verá algo como:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Para presionar origin/featurey configurarlo como ascendente, presione uy luego RETacepte el candidato de finalización predeterminado.

Si magit-push-current-set-remote-if-missinges así nil, entonces verías esto en su lugar:

Push feature to
 e elsewhere

Si presionó pahora, se le informaría que el flujo ascendente no está configurado (lo que implica que no puede empujar al flujo ascendente si no hay flujo ascendente).

Pero si magit-push-current-set-remote-if-missinges así nil, entonces la lista de interruptores aparecería --set-upstream, por lo que podría usarla P - u pcomo está acostumbrado (excepto que la segunda p está en minúsculas). Sin embargo, hay una complicación: después de cambiar el valor magit-push-current-set-remote-if-missing, debe reiniciar Emacs para --set-upstreamque aparezca o desaparezca.

Finalmente, puede definir el sentido ascendente utilizando el "conjunto de aguas arriba (y no hacer nada más)" comando: b uorigin/masterRET. Tenga en cuenta que cuando utiliza este enfoque, solo puede seleccionar una rama que ya existe.


Pero sería mejor configurar el control remoto push y presionar para eso. Para obtener más información sobre el control remoto push y cómo difiere del flujo ascendente, consulte el nodo Branching en el manual de información (la versión web aún no se ha actualizado).

Básicamente, la bifurcación ascendente es la bifurcación en la que la bifurcación de características eventualmente se fusionará (fusionando o rebase, no presionando), lo más probable origin/master. Y el mando a distancia es donde empujas tus ramas de características mientras aún trabajas en ellas o para que alguien más pueda fusionarlas. Si se nombra la rama local featurey el push-remote lo es my-fork, entonces presionar esa rama usando P pempujaría a my-fork/feature. (El "push-to-branch" no se puede configurar, el nombre de la sucursal en el push-remote siempre es el mismo que el nombre local).

Entonces, si bien su pregunta era algo así como "cómo presiono hacia arriba, mientras configuro el flujo hacia arriba al mismo tiempo", mi recomendación es no presionar hacia arriba, sino presionar hacia el control remoto.

Siempre que no haya cambiado el valor de magit-push-current-set-remote-if-missingusted, puede configurar el mando a distancia mediante P psome-remoteRET. Pero, dado que probablemente empuje todas las ramas de funciones al mismo control remoto, es mejor configurar el control remoto de empuje una vez para todas las ramas y terminar con él: by luego M-phasta que se seleccione el control remoto correcto.


También tenga en cuenta que generalmente no debería ser necesario establecer explícitamente la rama ascendente. Cuando crea una nueva rama y selecciona una rama remota como punto de partida, entonces se usa como flujo ascendente.

Desafortunadamente, el punto de partida generalmente es una rama local y, en ese caso, Git por defecto no lo usa como el flujo ascendente. Pero eso se puede solucionar fácilmente ejecutando esto una vez:

git config --global branch.autoSetupMerge always

El valor predeterminado es true, que significa "establecer el punto de partida como ascendente, siempre que sea una rama remota ".


Por cierto, lo mismo se aplica al push-remote. Eso también debería establecerse semiautomáticamente en repositorios "nuevos". Si clona un repositorio, se le preguntará si desea usarlo origincomo control remoto push. Debería responder "sí", a menos que vaya a agregar otro control remoto, por ejemplo my-fork, que debe usarse como control remoto push. Cuando agrega un nuevo control remoto usando M ay remote.pushDefaultaún no está configurado, se le preguntará si desea usar el control remoto recién agregado como control remoto push.

Esto se puede configurar con magit-clone-set-remote.pushDefaulty magit-remote-add-set-remote.pushDefault.

Otra opción avanzada es magit-branch-prefer-remote-upstream, que por defecto es nil. Si lo establece en t, y luego selecciona una rama local como punto de partida para una nueva rama, entonces el flujo ascendente del punto de inicio podría (según algunas reglas, ver cadena de documentos) como flujo ascendente, en lugar de El punto de partida mismo.

tarsius
fuente