有几种方法可以设置上游,同时推动或不推动。
如果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/master
RET。请注意,使用这种方法时,只能选择一个已经存在的分支。
但是最好配置远程推送并推送到该远程推送。要了解有关推送远程及其与上游有何不同的更多信息,请参阅信息手册中的“ 分支”节点(Web版本尚未更新)。
基本上,上游分支是您的功能分支最终最有可能合并到的分支(通过合并或重新设置基础,而不是通过推送)origin/master
。而“推-远程”功能则是您在继续使用功能分支时将其推入的位置,以便其他人可以合并它们。如果本地分支已命名feature
,而push-remote是my-fork
,则使用推送该分支P p将推送到my-fork/feature
。(无法配置“推送到分支”,推送远程上的分支名称始终与本地名称相同。)
因此,尽管您的问题类似于“如何在同时配置上游的同时向上游推”,但我的建议是根本不向上游推,而应该推向远程推。
前提是您尚未更改的值,则magit-push-current-set-remote-if-missing
可以使用来配置Push-remote P psome-remote
RET。但是,由于您可能会将所有功能分支推送到同一个遥控器,因此最好为所有分支设置一次推送-远程操作并对其进行操作:b然后M-p选择正确的遥控器。
另请注意,通常不必显式设置上游分支。创建新分支并选择一个远程分支作为起点时,该分支将用作上游分支。
不幸的是,起点通常是本地分支,在这种情况下,默认情况下Git不会将其用作上游。但这可以通过运行一次轻松解决:
git config --global branch.autoSetupMerge always
默认值为true
,表示“将起点设置为上游,前提是它是远程分支”。
顺便说一下,同样适用于推式遥控器。通常也应该在“新”存储库中半自动设置该设置。如果克隆存储库,系统将询问您是否要将其origin
用作推送远程。您应该回答“是”,除非您要添加另一个遥控器(例如)my-fork
,该遥控器应被用作推送遥控器。当您使用M a和remote.pushDefault
尚未添加新的遥控器时,系统会询问您是否要将新添加的遥控器用作推式遥控器。
可以使用magit-clone-set-remote.pushDefault
和进行配置magit-remote-add-set-remote.pushDefault
。
另一个高级选项是magit-branch-prefer-remote-upstream
,默认为nil
。如果你将其设置为t
,然后选择一个本地分支为起点一个新的分支,那么出发点的上游威力(根据一定的规则,请参见文档弦)作为上游,而不是起点本身。
<remote>/<branch>
零件被意外地遗漏在提示之外(请参阅此评论)。同时,您可以设置magit-push-current-set-remote-if-missing
为nil。