Pelo que me lembro, se estou trabalhando em uma ramificação, por exemplo, my-feature-branch
eu costumava fazer isso no magit-status
menu e P P
, em seguida, selecionava a ramificação remota em uma lista que tinha origin/my-feature-branch
no topo. Isso funcionou lindamente.
Recentemente, a partir desta discussão , eu poderia fazer algo semelhante com P -u e
(abrir magit-push-popup
, definir a --set-upstream
bandeira e usar e
em outro lugar), o que também me deixaria escolher em uma lista de ramos que começam com origin/my-feature-branch
. Isso funcionou bem para mim também. Ainda mais recentemente, no entanto, isso não funciona mais e eu não consegui descobrir a melhor maneira de definir um ramo upstream.
Quando eu uso P e
a primeira opção para um ramo para empurrar é origin/my-feature-branch
, que é quase sempre o que eu quero. No entanto, ele não define origin/my-feature-branch
como o upstream da minha filial local. Usar P u
me permite escolher o ramo upstream, mas origin/my-feature-branch
não está na lista, e eu tenho que digitar origin/my-feature-branch
sem concluir a guia (sei que isso não é difícil, mas é propenso a erros do usuário e é mais lento que a linha de comando).
Essa é a única maneira de definir uma ramificação upstream agora ou estou perdendo alguma coisa? Analisei outras discussões e documentação relacionadas ao problema, mas todas as fontes que encontrei parecem desatualizadas.
<remote>/<branch>
peça foi acidentalmente deixada de fora do prompt (consulte este comentário ). Enquanto isso, você pode definirmagit-push-current-set-remote-if-missing
para zero.Respostas:
Existem várias maneiras de configurar o upstream, pressionando ou sem pressionar ao mesmo tempo.
Se
magit-push-current-set-remote-if-missing
não fornil
(o padrão), você verá algo como:Para enviar
origin/feature
e definir isso como upstream, pressione ue, em seguida, RETaceite o candidato a conclusão padrão.Se
magit-push-current-set-remote-if-missing
fornil
, você verá isso:Se você pressionou pagora, seria informado que o upstream não está configurado (o que implica que você não pode avançar para o upstream se não houver upstream).
Mas, se
magit-push-current-set-remote-if-missing
estivernil
, a lista de opções será exibida--set-upstream
, para que você possa usar P - u pcomo está acostumado (exceto que o segundo p é minúsculo). Porém, há uma complicação: depois de alterar o valor,magit-push-current-set-remote-if-missing
você deve reiniciar o Emacs para--set-upstream
aparecer ou desaparecer.Finalmente, você pode definir o montante usando o "upstream conjunto (e fazer mais nada)" comando: b u
origin/master
RET. Observe que, quando você usa essa abordagem, é possível selecionar apenas uma ramificação que já existe.Mas seria melhor configurar o push-remote e empurrar para isso. Para saber mais sobre o push-remote e como ele difere do upstream, consulte o nó Ramificação no manual de informações (a versão da Web ainda não foi atualizada).
Basicamente, a ramificação upstream é a ramificação na qual sua ramificação de recursos será eventualmente mesclada (mesclando ou reestruturando, não pressionando), provavelmente
origin/master
. E o push-remote é para onde você envia as ramificações dos recursos enquanto ainda trabalha nelas ou para que outras pessoas possam mesclá-las. Se a ramificação local for nomeadafeature
e o push-remote formy-fork
, pressione essa ramificação usando P ppush paramy-fork/feature
. (O "push-to-branch" não pode ser configurado, o nome da ramificação no push-remote é sempre o mesmo que o nome local.)Portanto, enquanto sua pergunta era algo como "como eu empurro para o upstream, enquanto configuro o upstream ao mesmo tempo", minha recomendação é não empurra para o upstream, mas empurra para o push-remote.
Desde que você não tenha alterado o valor,
magit-push-current-set-remote-if-missing
você pode configurar o push-remote usando P psome-remote
RET. Porém, como você provavelmente envia todas as ramificações de recurso para o mesmo controle remoto, é melhor definir uma vez para todas as ramificações e concluir com ele: be M-paté que o controle remoto correto seja selecionado.Observe também que geralmente não deve ser necessário definir explicitamente a ramificação upstream. Quando você cria uma nova ramificação e seleciona uma ramificação remota como ponto de partida, isso é usado como upstream.
Infelizmente, o ponto de partida geralmente é uma ramificação local e, nesse caso, o Git, por padrão, não o usa como o upstream. Mas isso pode ser facilmente corrigido executando-o uma vez:
O valor padrão é
true
, o que significa "definir o ponto de partida como upstream, desde que seja uma ramificação remota ".A propósito, o mesmo se aplica ao controle remoto. Isso também deve ser definido semi-automaticamente em "novos" repositórios. Se você clonar um repositório, você será perguntado se deseja usar
origin
como push-remote. Você deve responder "sim", a menos que queira adicionar outro controle remoto, por exemplomy-fork
, que deve ser usado como controle remoto. Quando você adiciona um novo controle remoto M aeremote.pushDefault
ainda não está definido, será perguntado se deseja usar o controle remoto recém-adicionado como o controle remoto.Isso pode ser configurado usando
magit-clone-set-remote.pushDefault
emagit-remote-add-set-remote.pushDefault
.Outra opção avançada é a
magit-branch-prefer-remote-upstream
padrãonil
. Se você configurá-lo comot
e selecionar uma ramificação local como ponto de partida para uma nova ramificação, o upstream do ponto de partida pode (de acordo com algumas regras, consulte doc-string) ser usado como upstream, em vez de o próprio ponto de partida.fonte