Alterar o fluxo de uma filial com o Magit

47

Quando você pressiona um ramo com Magit (with P P) e o ramo não tem montante, o Magit pergunta o nome do ramo que você deseja enviar. Isso é ótimo.

Depois de configurar o upstream para uma ramificação, no entanto, o Magit não pergunta mais onde você deseja enviá-lo. Isso geralmente é conveniente (você não quer ser solicitado todas as vezes), mas torna difícil enviar uma ramificação para outra ramificação remota.

Existe uma maneira de o Magit me perguntar novamente sobre o ramo de destino, mesmo se o ramo atual já tiver um montante?


Caso de uso

É bastante comum que eu tenha um ramo como este:

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

e quero alterar as ramificações local e remota para issue-30-and-34. Se eu apenas renomear a ramificação local, fico com isso:

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

Mesmo se eu excluir origin/issue-30, fazendo P Pem issue-30-and-34 simplesmente recriar o origin/issue-30.

O que acabo fazendo é o seguinte, mas parece algo indireto para algo que pode ser feito em um único gitcomando:

  1. Crie uma nova ramificação chamada issue-30-and-34 (em vez de renomear a antiga),
  2. excluir as versões local e remota de issue-30,
  3. push issue-30-and-34(já que ele ainda não tem upstream, o Magit me perguntará para onde empurrar).
Malabarba
fonte
Considere aceitar a resposta por @tarsius em vez da minha (para facilitar a localização de informações relevantes ).
Constantine
@Constantine done.
Malabarba 26/01

Respostas:

60

Começando com v2.1você pode alterar o upstream da ramificação atual para uma ramificação remota ou local usando bu[REMOTE/]BRANCHRET. Começando com v2.4, se um upstream já estiver definido, ele buserá desativado. Pressione unovamente para definir um novo valor.

Começando com v2.4e se o upstream estiver desativado, você também pode configurá-lo enquanto pressiona usando pu[REMOTE/]BRANCHRET. Você será perguntado automaticamente qual filial usar como upstream. Uma vez que um upstream tenha sido definido, ele puserá pressionado para isso sem permitir que você altere o upstream. Portanto, para mudar a montante, você deve usar a abordagem descrita no parágrafo anterior.

Antes v2.4, também era possível definir a ramificação remota para a qual você está empurrando como a ramificação upstream p-ueREMOTE/BRANCHRET. Mas agora a --set-upstreamopção não está mais disponível no pop-up push por padrão . Você pode recuperá-lo definindo magit-push-current-set-remote-if-missingcomo nulo. Isso tem dois efeitos: a --set-upstreamopção estará disponível novamente após a próxima reinicialização e a abordagem descrita no parágrafo anterior não funcionará mais.


Se você deseja que os dois recursos descritos no segundo e terceiro parágrafos estejam disponíveis ao mesmo tempo, deixe magit-push-current-set-remote-if-missingintocados e adicione-o ao arquivo init:

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

Pressione " P C-u C-u P" para fazer o Magit perguntar qual ramificação remota e remota usar antes de pressionar.

(Com um único argumento de prefixo (" P C-u P"), o Magit pergunta qual controle remoto usar.)

Eu descobri isso pressionando P C-h k Pum buffer de status do Magit, lendo os documentos de magit-pushe magit-push-dwim(esses documentos parecem estar desatualizados, BTW) e experimentando.

PS: Eu uso Magit magit-1.2.0-2049-ge6839e8.

Constantine
fonte
5
Esta resposta está um pouco desatualizada.
Szymon Wygnański 15/10
1

Parece que está na seção branch / configure agora:

b C p para definir o pushRemote

William Casarin
fonte
Alguma idéia de como especificar um controle remoto além do padrão?
precisa
0

A partir de novembro de 2016 e a mais recente magit, aqui está uma solução parcial:

P e- permite empurrar elsewhere, mas não é lembrado

Eu não consegui encontrar um caminho para o Magit --set-upstream, então eu fiz isso no terminal, meio que uma trapaça, mas isso me superou:

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

E agora o novo upstream está salvo, e eu posso construir minha próxima coisa :)

Josh.F
fonte
1
"Não consigo encontrar uma maneira de [...] --set-upstream" - Talvez você devesse tentar ler a resposta de
társio
claro, foi o que me ajudou a descobrir isso. Assim, magitmudou um pouco desde então, e minha esperança é que a minha solução salva alguém um extra alguns minutos
Josh.F
1
O primeiro parágrafo dessa resposta explica como alterar o upstream e funciona no mais recente magit.
npostavs