用于`pull --rebase upstream`(非来源)的magit

fom*_*mil 4 emacs magit

假设我们有一个upstreamgit存储库,它是项目的官方主页,origin是我们自己的远程git存储库(例如github fork).

在命令行中,我会在发布PR之前重新绑定到主服务器

git pull --rebase upstream master
Run Code Online (Sandbox Code Playgroud)

但我怎么用magit做这个呢?该F命令允许一个,--rebaseorigin据我所知,这总是反对我.

理想情况下,我想在F菜单下使用一个命令来执行此操作,因为这对我来说是非常常见的操作.

Bri*_*ell 5

magit,您可以使用C-uprefix参数来允许您为推拉操作设置远程.你打算C-u F -r F upstream<RET>这样做.如果您还需要指定分支名称,可以将C-u前缀加倍:C-u C-u F -r F upstream<RET> master<RET>.在Magit的下一个版本2.1.0中,这将更易于访问,F -r o而不必使用prefix参数.

如果这太麻烦了,我建议你明确地设置上游.git/config; 然后所有拉动都将来自上游.您可以git branch -u upstream/master在本地分支上执行此操作,或者git branch -u upstream/master mybranch如果您在不同的分支上执行此操作.然后,无论您使用Magit还是git在命令行上,简单git pull --rebaseF -r F将从配置的分支拉出.

如果您需要在从不同的仓库中提取时使用自己的个人仓库,则可以随时设置单独的推送以进行推送和拉动.我知道没有方便的命令包装器,但如果你.git/config直接编辑,你可以这样做:

[branch "mybranch"]
remote = upstream
pushremote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)

如果您正在执行此操作,并且将始终重新定位您的本地分支,您甚至可以添加:

rebase = true
Run Code Online (Sandbox Code Playgroud)

而且不必指定--rebase你拉的时间.

如果您想为整个仓库而不是单个分支执行此操作,您可以使用:

[remote]
pushdefault = origin
Run Code Online (Sandbox Code Playgroud)

然后让分支从他们配置的上游拉出来,但推送到你自己的回购.