从一个git分支拉出来,推入另一个分支

问题描述 投票:2回答:1

我有一个本地BitBucket服务器,我将我的更改从Web UI合并到master。我想与一个永久的个人分支机构合作,我将定期创建合并请求。

我希望git pullorigin/master合并到我当地的master,并且git push将我的当地大师推入origin/itsadok。然后,我将在服务器上创建合并请求,并将我的更改从origin/itsadok合并到origin/master

BitBucket server:   origin/itsadok --- via PR --> origin/master
                       ↑                              |
Local machine:          \---------- master <---------/

看起来很简单。

我知道我可以手动做git push origin master:itsadok,但我希望它是默认值。似乎设置默认推送目标的唯一方法是将branch.master.merge配置为refs/heads/itsadok(并将push.default配置为upstream),但是pull也将从我的个人分支合并。

有没有办法配置git,以便默认推送和拉动将如上所述工作?

编辑:我想到通过将push.default设置为current,将本地分支命名为远程个人分支,并将branch.itsadok.merge设置为refs / heads / master,我可以实现非常相似的功能。换一种说法:

BitBucket server:   origin/itsadok --- via PR --> origin/master
                       ↑                              |
Local machine:          \---------- itsadok <--------/

这几乎可以工作,但因为我有脚本假设我的本地分支被称为master,这个解决方案对我来说相当不方便。但是,如果没有其他想法,我会满足于此。

git version-control bitbucket-server
1个回答
1
投票

您可以通过push refspecs的正确映射来实现所描述的行为。如push manual中所述,git按以下顺序查看要推送的内容:

  • 在命令行中显式列出的参数或选项(如果存在)
  • remote.<remote_name>.push配置如果不是空的
  • push.default配置否则

所以你可以让master跟踪origin\master,所以拉动工作正常,然后配置remote.origin.push,所以push不带参数适合你的工作流程:

git config remote.origin.push refs/heads/master:refs/heads/itsadok

您可以通过使用git rev-parse --symbolic-full-name @{upstream}打印上游分支并使用git rev-parse --symbolic-full-name @{push}推送分支来检查您的配置

但是,有几点需要注意:

  • git status会将master与其上游进行比较,因此即使在实际提交提交后,您也会看到“提前提交”通知。
  • 在没有参数的情况下调用git push,而在非master分支上仍然会将数据从master推送到itsadok。如果你想尝试解决这个问题,最好的方法可能是refspec configuration examples
© www.soinside.com 2019 - 2024. All rights reserved.