如何防止Magit询问将分支推向何方?


10

从状态缓冲区调用magit-push-currentP PMagit 2.1.0问我在没有设置上游的情况下第一次将分支推到哪里。

如何让它像以前一样自动生成名称?


2
如果您不知道,自动生成的名称是完成选项之一。所以,你把第一次some-branch-name给了origin遥控器,你可能只需要输入o TAB s TAB你会得到你想要的名称。
马拉巴巴

哦,我不知道,谢谢。问题是我有很多以相同的前缀开头的分支,这不是很方便,而且我总是穿上与本地分支同名的远程分支。
z1naOK9nu8iY5A

Answers:


8

更新:到目前为止,下面提到的“推送分支”已经实现。有关更多信息,请参见有关分支文档

您必须设置一次上游分支。一旦你这样做,是P P推到你将得到的状态缓冲器unpulled和unpushed变化表(假设存在的话)。

有多种设置上游分支的方法。您可以使用--set-upstream推式弹出窗口中的开关:P -u P。或使用设置上游但不执行其他操作的命令:b u

Magit现在还可以在创建新分支时自动设置上游分支,前提是“起点”是分支名称。这适用于本地和远程“上游”。但是请注意,如果您选择本地分支作为起点,那么这将无助于推动。从当前存储库推送到当前存储库显然是没有意义的,并且是不允许的。

因此,当“上游”分支实际上是另一个本地分支时,其P P行为就像未配置任何上游分支一样,其行为与完全相同P e。如果根本没有配置上游,则情况相同。

这是由于在GIT中的限制:一个只能关联一个其他分支与一些分支,该分支被当时称为“上游分支”。如果至少有一个“上游”分支和一个“发布”分支,那就更好了。我打算最终在Magit中实现。参见问题#1485

因此,如果您只想按此按钮,P P则“上游”分支必须是“起源/主”,而不是“主”。


我正在考虑添加一个push变量,该变量始终在git push没有任何参数的情况下运行。然后,这将完全取决于Git配置。


我分支master了但未设置上游,是否应该分支origin/master以自动设置上游?
z1naOK9nu8iY5A

查看最新答案。
tarsius

1
origin/master设置origin/master为上游分支,但我希望有origin/branch-name作为上游。
z1naOK9nu8iY5A

如果那是您想要的,那么最好在推送过程中进行。P -p P <... completion ...> RET请注意,它origin/branch-name是作为补考候选人提供的,因此您不必键入它。
tarsius

2
当您使用gitflow并提取请求以进行代码审查(每个功能都有一个分支)时,这会很痛苦,因为您通常只推送一次,并且总是创建一个与本地分支同名的远程分支。推送到其他命名分支将是围绕代码审查的最终结果。
巴里·凯利

3

我使用以下建议,--set-upstream当当前分支还没有上游时,它将自动启用:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

结合ido完成,可以使用以下命令推新分支P P RET

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)

太酷了!非常感谢你!
z1naOK9nu8iY5A

0

我只是使用创建新分支,b c然后编辑该.git/config文件以指向它,origin/branch而不是四处逛逛magit 2的所有东西,但这似乎还是行不通的。

更改:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

这行得通,但是我仍然没有在magit2中找到可以完成相同功能的键组合。尝试设置遥控器不起作用,因为它在原始位置尚不存在。


1
可以使用设置上游bu。但这使用了,git branch --set-upstream-to并且您知道,Git无法将不存在的分支设置为上游,因此Magit也不能。
tarsius

@tarsius magit 1似乎可以满足我的要求。我只是想找回一些类似的工作流程。
David N. Welton
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.