Из того, что я помню, если я работал над веткой, например, my-feature-branch
я имел обыкновение делать это из magit-status
меню с помощью P P
, а затем выбирал удаленную ветку из списка, который был origin/my-feature-branch
вверху. Это работало прекрасно.
Недавно, с этим обсуждением , я мог сделать что-то похожее P -u e
(открытие magit-push-popup
, установка --set-upstream
флага и использование e
для других), что также позволило бы мне выбирать из списка веток, начиная с origin/my-feature-branch
. Это работало хорошо для меня тоже. Однако, совсем недавно, это больше не работает, и я не смог найти лучший способ установить восходящую ветку.
Когда я использую P e
первый вариант для ветки, к которой нужно перейти origin/my-feature-branch
, это почти всегда то, что я хочу. Тем не менее, он не установлен origin/my-feature-branch
в качестве восходящего потока для моего местного филиала. Использование P u
позволяет мне выбрать восходящую ветвь, но origin/my-feature-branch
ее нет в списке, и мне приходится печатать origin/my-feature-branch
без завершения табуляции (я знаю, что это не сложно, но оно подвержено ошибкам пользователя и медленнее, чем командная строка).
Это единственный способ установить восходящую ветку сейчас, или я что-то упустил? Я смотрел на другие обсуждения и документацию, связанную с этой проблемой, но все источники, которые я нашел, кажутся устаревшими.
<remote>/<branch>
часть была случайно опущена (см. Этот комментарий ). В то же время, вы можете установитьmagit-push-current-set-remote-if-missing
на ноль.Ответы:
Есть несколько способов установить восходящий поток, одновременно нажимая или не нажимая.
Если
magit-push-current-set-remote-if-missing
неnil
(по умолчанию), то вы увидите что-то вроде:Чтобы нажать
origin/feature
и установить его как восходящий, нажмите, uа затем, RETчтобы принять кандидата на завершение по умолчанию.Если
magit-push-current-set-remote-if-missing
естьnil
, то вы увидите это вместо:Если вы нажали pсейчас, то вам скажут, что восходящий поток не настроен (это означает, что вы не можете перейти в восходящий поток, если нет восходящего потока).
Но если
magit-push-current-set-remote-if-missing
естьnil
, то список переключателей будет представлен--set-upstream
, так что вы можете использовать его P - u pкак обычно (за исключением того, что второй символ p в нижнем регистре). Однако есть одно осложнение: после изменения значенияmagit-push-current-set-remote-if-missing
вы должны перезапустить Emacs,--set-upstream
чтобы появиться или исчезнуть.Наконец , вы можете установить вверх по течению , используя «набор вверх по течению (и больше ничего не делать)» команду: b u
origin/master
RET. Обратите внимание, что при использовании этого подхода вы можете выбрать только ту ветвь, которая уже существует.Но было бы лучше настроить push-пульт и нажать на него. Чтобы узнать больше о push-remote и его отличиях от восходящего потока, см. Раздел « Ветвление» в информационном руководстве (веб-версия еще не обновлена).
По сути, восходящая ветвь - это ветвь, в которую в конечном итоге будет добавлена ваша функциональная ветвь (путем объединения или перебазирования, а не путем нажатия)
origin/master
. А push-remote - это то место, куда вы перемещаете ветви функций, пока еще работаете с ними, или чтобы кто-то другой мог объединить их. Если локальная ветвь названа,feature
а push-remote -my-fork
, то нажатие этой ветки с помощью P ppush приведет кmy-fork/feature
. («Push-to-branch» не может быть настроен, имя ветви на push-remote всегда совпадает с локальным именем.)Так что, хотя ваш вопрос был чем-то вроде «как я проталкиваю к восходящему каналу, одновременно настраивая восходящий поток», я рекомендую вообще не переходить к восходящему потоку, а вместо этого нажимать на push-пульт.
Если вы не изменили значение,
magit-push-current-set-remote-if-missing
вы можете настроить push-пульт с помощью P psome-remote
RET. Но, поскольку вы, скорее всего, отправляете все ветви функций на один и тот же пульт, лучше установить push-пульт один раз для всех веток и покончить с этим: bи затем M-pдо тех пор, пока не будет выбран правильный пульт.Также обратите внимание, что обычно нет необходимости явно устанавливать восходящую ветвь. Когда вы создаете новую ветвь и выбираете удаленную ветвь в качестве отправной точки, она используется в качестве восходящей.
К сожалению, отправной точкой обычно является локальная ветвь, и в этом случае Git по умолчанию не использует ее в качестве восходящего потока. Но это легко исправить, выполнив один раз:
Значение по умолчанию:
true
«установить начальную точку как восходящую, если это удаленная ветвь».Кстати, то же самое относится и к пуш-пульту. Это тоже обычно следует устанавливать полуавтоматически в «новых» репозиториях. Если вы клонируете репозиторий, вас спросят, хотите ли вы использовать его
origin
как push-пульт. Вы должны ответить «да», если только вы не собираетесь добавить другой пульт, скажемmy-fork
, который должен использоваться как push-пульт. Когда вы добавляете новый пульт с помощью M aиremote.pushDefault
еще не настроен, вас спросят, хотите ли вы использовать недавно добавленный пульт в качестве push-пульта.Это можно настроить с помощью
magit-clone-set-remote.pushDefault
иmagit-remote-add-set-remote.pushDefault
.Еще один расширенный вариант
magit-branch-prefer-remote-upstream
, который по умолчаниюnil
. Если вы установите егоt
, а затем выберете локальную ветвь в качестве отправной точки для новой ветки, тогда восходящий поток начальной точки может (в соответствии с некоторыми правилами см. Doc-string) использоваться в качестве восходящего потока вместо сама отправная точка.источник