从一个 git 分支拉出,推入另一个
pull from one git branch, push into another
我有一个本地 BitBucket 服务器,我将我的更改从 Web UI 合并到 master 中。
我想与一个永久的个人分支机构合作,我会定期从中创建合并请求。
我希望 git pull
将 origin/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 commit ahead”通知。
- 不带参数调用
git push
,而在非主分支上仍会将数据从主分支推送到 itsadok。如果你想尝试解决这个问题,最好的开始方式可能是 refspec configuration examples
我有一个本地 BitBucket 服务器,我将我的更改从 Web UI 合并到 master 中。 我想与一个永久的个人分支机构合作,我会定期从中创建合并请求。
我希望 git pull
将 origin/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 commit ahead”通知。- 不带参数调用
git push
,而在非主分支上仍会将数据从主分支推送到 itsadok。如果你想尝试解决这个问题,最好的开始方式可能是 refspec configuration examples