Cambiar una rama aguas arriba con Magit

47

Cuando empuja una rama con Magit (con P P) y la rama no tiene corriente arriba, Magit le pregunta el nombre de la rama a la que desea empujar. Eso es genial.

Sin embargo, una vez que configura el flujo ascendente para una rama, Magit ya no le pregunta dónde desea empujarlo. Esto suele ser conveniente (no desea que se le pregunte siempre), pero hace que sea difícil empujar una rama a una rama remota diferente.

¿Hay alguna manera de hacer que Magit me pregunte nuevamente sobre la sucursal de destino, incluso si la sucursal actual ya tiene un flujo ascendente?


Caso de uso

Es bastante común que tenga una rama como esta:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

y quiero cambiar las ramas locales y remotas a issue-30-and-34. Si solo cambio el nombre de la rama Local, me queda esto:

Local:    issue-30-and-34 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

Incluso si elimino origin/issue-30, haciendo P Pde issue-30-and-34 simplemente recrear el origin/issue-30.

Lo que termino haciendo es lo siguiente, pero parece algo indirecto para algo que se puede hacer en un solo gitcomando:

  1. Cree una nueva rama llamada issue-30-and-34 (en lugar de renombrar la antigua),
  2. eliminar versiones locales y remotas de issue-30,
  3. empujar issue-30-and-34(ya que todavía no tiene corriente arriba, Magit me preguntará dónde empujar).
Malabarba
fuente
Considere aceptar la respuesta de @tarsius en lugar de la mía (para que sea más fácil encontrar información relevante ).
Constantine
@Constantine hecho.
Malabarba

Respuestas:

61

Comenzando con v2.1usted, puede cambiar el flujo ascendente de la rama actual a una rama remota o local utilizando bu[REMOTE/]BRANCHRET. Comenzando con v2.4, si un flujo ascendente ya está configurado, busimplemente lo desarmará. Presione unuevamente para establecer un nuevo valor.

Comenzando con v2.4y si el flujo ascendente no está configurado, también puede configurarlo mientras presiona usando pu[REMOTE/]BRANCHRET. Se le preguntará automáticamente qué rama usar como flujo ascendente. Una vez que se ha establecido un flujo ascendente, pulo empujará sin permitirle cambiar el flujo ascendente. Entonces, para cambiar el flujo ascendente, debe utilizar el enfoque descrito en el párrafo anterior.

Antes v2.4también era posible establecer la rama remota que está presionando como la rama ascendente que usa p-ueREMOTE/BRANCHRET. Pero ahora el --set-upstreaminterruptor ya no está disponible en la ventana emergente push de forma predeterminada . Puede recuperarlo estableciéndolo magit-push-current-set-remote-if-missingen nulo. Eso tiene dos efectos: el --set-upstreaminterruptor estará disponible nuevamente después del próximo reinicio y el enfoque descrito en el párrafo anterior ya no funcionará.


Si desea que ambas funciones descritas en el segundo y tercer párrafo estén disponibles al mismo tiempo, magit-push-current-set-remote-if-missingno toque y agregue esto a su archivo init:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")
tarsius
fuente
11

Presione " P C-u C-u P" para que Magit le pregunte qué rama remota y remota usar antes de presionar.

(Con un solo argumento de prefijo (" P C-u P") Magit pregunta qué control remoto usar).

Encontré esto presionando P C-h k Pun búfer de estado Magit, leyendo los documentos de magit-pushy magit-push-dwim(estos documentos parecen estar desactualizados, por cierto) y experimentando.

PD: yo uso Magit magit-1.2.0-2049-ge6839e8.

Constantina
fuente
55
Esta respuesta está un poco desactualizada.
Szymon Wygnański
1

Parece que ahora está debajo de la sección rama / configuración:

b C p para configurar el pushRemote

William Casarin
fuente
¿Alguna idea de cómo especificar un control remoto además del predeterminado?
scry
0

A partir de noviembre de 2016, y la última magit, esta es una solución parcial:

P e- te permite empujar elsewhere, pero no se recuerda

No pude encontrar una manera para que Magit lo hiciera --set-upstream, así que solo hice esto desde la terminal, como una trampa, pero me superó este problema:

git push --set-upstream origin <branch-name>

Y ahora se guarda el nuevo flujo ascendente, y puedo construir mi siguiente cosa :)

Josh.F
fuente
1
"No puedo encontrar una manera de [...] --set-upstream" - Quizás deberías intentar leer la respuesta de tarsius
npostavs
claro, es lo que me ayudó a resolver esto. Simplemente, magitha cambiado un poco desde entonces, y mi esperanza es que mi solución ahorra alguien unos cuantos minutos extra
Josh.F
1
El primer párrafo de esa respuesta explica cómo cambiar el flujo ascendente, y funciona en la última versión.
npostavs