Изменить ветку вверх по течению с помощью Magit

47

Когда вы нажимаете ветку с помощью Magit (с помощью P P), и у ветви нет восходящего потока, Magit запрашивает у вас название ветви, к которой вы хотите перейти. Замечательно.

Однако после того, как вы установили восходящий поток для ветки, Magit больше не спрашивает вас, куда вы хотите его подтолкнуть. Это обычно удобно (вы не хотите, чтобы вас спрашивали каждый раз), но затрудняет отправку ветки в другую удаленную ветку.

Есть ли способ, чтобы Magit снова спросил меня о ветви назначения, даже если текущая ветка уже имеет восходящий поток?


Использование регистра

Довольно часто у меня есть такая ветка:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

и я хочу изменить как локальные, так и удаленные ветви issue-30-and-34. Если я просто переименую локальную ветку, у меня останется следующее:

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

Даже если я удалю origin/issue-30, делая P Pна issue-30-and-34 просто воссоздать origin/issue-30.

То, что я в конечном итоге делаю, заключается в следующем, но это кажется довольно окольным для чего-то, что может быть сделано в одной gitкоманде:

  1. Создайте новую ветвь с именем issue-30-and-34 (вместо переименования старой),
  2. удалить как локальную, так и удаленную версии issue-30,
  3. push issue-30-and-34(так как у него еще нет восходящего потока, Magit спросит меня, где нажать).
Malabarba
источник
Пожалуйста , рассмотреть вопрос о принятии ответа на @tarsius вместо шахты (чтобы сделать его легче найти необходимую информацию).
Константин
@ Константин готов.
Малабарба

Ответы:

61

Начиная с, v2.1вы можете изменить восходящий поток текущей ветви на удаленную или локальную ветку, используя bu[REMOTE/]BRANCHRET. Начиная с того v2.4, что если восходящий поток уже установлен, то buпросто сбросим его. Нажмите еще uраз, чтобы установить новое значение.

Начиная с, v2.4и если восходящий поток не установлен, вы также можете настроить восходящий поток, нажимая с помощью pu[REMOTE/]BRANCHRET. Вас автоматически спросят, какую ветку использовать в качестве восходящего потока. Как только восходящий поток будет настроен, puон подтолкнет к этому, не позволяя вам изменить восходящий поток. Таким образом, чтобы изменить восходящий поток, вы должны использовать подход, описанный в предыдущем абзаце.

Раньше v2.4также было возможно установить удаленную ветвь, которую вы отправляете, в качестве восходящей ветви, использующей p-ueREMOTE/BRANCHRET. Но теперь --set-upstreamпереключатель больше не доступен во всплывающем окне по умолчанию . Вы можете получить его обратно, установив magit-push-current-set-remote-if-missingна ноль. Это имеет два эффекта: --set-upstreamпереключатель будет снова доступен после следующего перезапуска, и подход, описанный в предыдущем абзаце, больше не будет работать.


Если вы хотите, чтобы обе функции, описанные во втором и третьем абзацах, были доступны одновременно, оставьте без изменений magit-push-current-set-remote-if-missingи добавьте это в свой файл инициализации:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")
Tarsius
источник
11

Нажмите « P C-u C-u P», чтобы Magit спросил, какую удаленную и удаленную ветку использовать, прежде чем нажать.

(С одним префиксным аргументом (" P C-u P") Magit спрашивает, какой пульт использовать.)

Я нашел это, нажав P C-h k Pв буфере статуса Magit, прочитав документы magit-pushи magit-push-dwim(эти документы, кажется, устарели), и экспериментируя.

PS: я использую Magit magit-1.2.0-2049-ge6839e8.

Константин
источник
5
Этот ответ немного устарел.
Szymon Wygnański
1

Похоже, что теперь он находится в разделе branch / configure:

b C p установить pushRemote

Уильям Казарин
источник
Любая идея, как указать удаленный, кроме по умолчанию?
scry
0

По состоянию на ноябрь 2016 года и позднее magit, вот частичное решение:

P e- позволяет толкать elsewhere, но это не запоминается

Я не мог найти способ для magit --set-upstream, поэтому я просто сделал это из терминала, вроде обмана, но это помогло мне справиться с этой проблемой:

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

И теперь новый апстрим сохранен, и я могу построить следующую вещь :)

Josh.F
источник
1
«Я не могу найти [...] способ --set-upstream» - возможно, вам стоит попробовать прочитать ответ
Тарсиуса
конечно, именно это помогло мне понять это. Просто magitс тех пор немного изменился, и я надеюсь, что мое решение сэкономит кому-то лишние несколько минут
Josh.F
1
Первый абзац этого ответа объясняет, как изменить восходящий поток, и он работает в последней версии.
npostavs