我团队的工作流程如下:
- 在任何时候,我们都有不止一个活跃的分支;对于应用程序的两个不同版本(例如,
v4
对于即将发布的版本,以及v5
在遥远的将来发布的版本),开发同时登陆 2 个或更多分支。我们定期合并v4
到v5
. - 没有人直接在
v4
orv5
上工作,我们在分支中处理功能分支并创建拉取请求,指向上游v4
或v5
(使用 Atlassian Stash)
假设我创建了一个新的开发项目。我创建了一个新分支:
git checkout -b SOMETHING_FOR_V4 v4
现在我在SOMETHING_FOR_V4
。我提交并推送:
git push -u origin SOMETHING_FOR_V4
我已经设置了远程跟踪分支,-u
所以下次我更新某些东西时,我可以git push
不指定分支,Git 会知道推送到哪里。
然而时间已经过去了,我想重新定位。
我需要明确告诉git rebase origin/v4
相反,我可以origin/v4
在创建分支时设置到我的跟踪分支,但是当我推送时,我必须git push origin SOMETHING_FOR_V4
每次都说。
我想要的是让 Git 足够聪明,可以知道在哪个基础上进行变基。如果我只是git rebase
在做之后说git push -u
,它会走我推送时指定的远程跟踪分支,这不是我想要的。
基本上我想有一个单独的跟踪分支用于git push
(我第一次推送的那个)和一个单独的用于git rebase
(在我开始[1]的顶部v4
或v5
从哪个开始)。
有可能得到这种行为吗?
或者,我将使用什么命令来确定自己是否“更接近”v4
或v5
(我正在考虑在别名中自动获取和重新设置基准)?
[1] 在这种情况下,它可以重新建立在我开始的基础之上,或者说它v4
的远程基础origin/v4
。假设我可以自己处理保持v4
和origin/v4
同步。