Как мне установить ветку вверх по течению, чтобы протолкнуть локальную ветку в magit?

11

Из того, что я помню, если я работал над веткой, например, 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без завершения табуляции (я знаю, что это не сложно, но оно подвержено ошибкам пользователя и медленнее, чем командная строка).

Это единственный способ установить восходящую ветку сейчас, или я что-то упустил? Я смотрел на другие обсуждения и документацию, связанную с этой проблемой, но все источники, которые я нашел, кажутся устаревшими.

elethan
источник
1
Я думаю, что <remote>/<branch>часть была случайно опущена (см. Этот комментарий ). В то же время, вы можете установить magit-push-current-set-remote-if-missingна ноль.
Кайл Мейер,
Я только что исправил это. Мой ответ ниже предполагает, что исправить.
tarsius
Нашел и исправил некоторые другие связанные проблемы. Вам, вероятно, придется подождать несколько часов, пока Мелпа наверстает упущенное, прежде чем все на 100% верно.
tarsius

Ответы:

11

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

Если magit-push-current-set-remote-if-missingне nil(по умолчанию), то вы увидите что-то вроде:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Чтобы нажать origin/featureи установить его как восходящий, нажмите, uа затем, RETчтобы принять кандидата на завершение по умолчанию.

Если magit-push-current-set-remote-if-missingесть nil, то вы увидите это вместо:

Push feature to
 e elsewhere

Если вы нажали 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 uorigin/masterRET. Обратите внимание, что при использовании этого подхода вы можете выбрать только ту ветвь, которая уже существует.


Но было бы лучше настроить 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-remoteRET. Но, поскольку вы, скорее всего, отправляете все ветви функций на один и тот же пульт, лучше установить push-пульт один раз для всех веток и покончить с этим: bи затем M-pдо тех пор, пока не будет выбран правильный пульт.


Также обратите внимание, что обычно нет необходимости явно устанавливать восходящую ветвь. Когда вы создаете новую ветвь и выбираете удаленную ветвь в качестве отправной точки, она используется в качестве восходящей.

К сожалению, отправной точкой обычно является локальная ветвь, и в этом случае Git по умолчанию не использует ее в качестве восходящего потока. Но это легко исправить, выполнив один раз:

git config --global branch.autoSetupMerge always

Значение по умолчанию: 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) использоваться в качестве восходящего потока вместо сама отправная точка.

Tarsius
источник