【问题标题】:pull from one git branch, push into another从一个 git 分支拉出,推入另一个
【发布时间】:2017-12-24 17:28:02
【问题描述】:

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

我希望 git pullorigin/master 合并到我的本地 master 中,并希望 git push 将我的本地 master 推送到 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 和 pull 像上面描述的那样工作?

编辑:我突然想到,通过将push.default 设置为current,将本地分支命名为与远程个人分支相同,并设置branch.itsadok.merge,我可以实现非常相似的效果给裁判/负责人/大师。换句话说:

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

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

【问题讨论】:

    标签: git version-control bitbucket-server


    【解决方案1】:

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

    • 在命令行中明确列出的参数或选项(如果存在)
    • remote.&lt;remote_name&gt;.push配置不为空
    • push.default 否则配置

    所以你可以让master 跟踪origin\master,所以拉动工作正常,然后配置remote.origin.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 与其上游进行比较,因此即使在实际推送提交后,您也会看到“1 commit ahead”通知。
    • 在不带参数的情况下调用git push,而在非master 分支上仍会将数据从master 推送到itsadok。如果您想尝试解决此问题,可能最好的开始方式是refspec configuration examples

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2020-07-12
      • 2020-06-09
      • 2021-11-05
      • 2019-03-08
      相关资源
      最近更新 更多