繁体   English   中英

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

[英]pull from one git branch, push into another

我有一个本地 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.default设置为current 、将本地分支命名为与远程个人分支相同的名称并将branch.itsadok.merge设置为 refs/heads/master 来实现非常相似的功能。 换句话说:

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

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

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

  • 命令行中明确列出的参数或选项(如果存在)
  • remote.<remote_name>.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 次提交”通知。
  • 不带参数调用git push ,而在非 master 分支上仍然会将数据从 master 推送到 itadok。 如果您想尝试修复此问题,最好的开始方法可能是refspec 配置示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM