我们的项目代码是使用Git来管理的,,在开发新需求时我们会从主分支中切出一个feature分支
进行开发,在feature分支
开发期间主分支可能会有新的一些提交,然后我们在feature分支
开发完后要如果要基于主分支上的新的提交去打包提测,git rebase
操作是最合适的选择,因为feature分支
代码目前是不要合并到主分支上的,查看git代码分支操作整理。
一、feature分支rebase后的问题
feature分支
开发完功能后,我们已经推送到了远程,在打包提测前,我们需要同步一下主分支代码,于是在主分支拉取最新代码后,在feature分支
执行了git rebase release_0224
,或者Sourcetree
上执行变基
操作.
-
之后变成了下面这个样子.。可以看到有23个推送和5个拉取,需要先从远程拉取再推送到远端,但是我们显然是没有必要从远程拉取的,因为这个分支只有自己的提交,所以我们只想将更改
分支对0224分支做了rebase后的情况.png推送到远程
。
-
接下来
没有拉取更新前去推送这个更新到远程的结果.png推送到远程
会报错:
Updates were rejected because the tip of your current branch is behind
。==> git本地仓库的当前版本低于远程仓库的版本, 需要先更新.
-
接下来先更新再推送到远程,可以做到推送到远端了,但是分支变成了这样:
先拉取再推送的后果.png
提交记录重复了一遍,如下面的红框和绿框。
二、这个问题的处理方式
我们想要实现的是执行了rebase后,远程分支能与本地的feature分支
同步。最后在网上找到了解决方法:
- feature分支只有一个人在开发:
可以直接进行强制推送,执行命令行:
git push --force origin featureAAA
// --force可以直接理解为用你本地分支的状态覆盖掉远端分支状态.
- feature分支多个人在开发:
进行强制推送需要加参数,在强制覆盖前会进行一次检查: 如果其他人在该分支上有提交会有一个警告, 执行命令行:
git push --force-with-lease origin featureAAA
上述方式解决后,分支线是正常的,且不会像先拉取再推送操作那样会重复一遍:
强制推送后分支线.png
网友评论