远程特性分支开发使用git rebase时推送异常问题咨询
错误点说明
- 上游绑定命令无效:
git feature_branch [-u|--set-upstream-to]是不符合Git语法的无效命令,无法完成本地feature_branch和远程origin/feature_branch的绑定,会导致后续推拉操作的目标分支错乱。 - rebase操作逻辑错误:你在master分支执行无参数的
git rebase没有任何实际作用,你需要的是在特性分支上执行git rebase master,才能将特性分支的提交基底更新为最新的master代码,实现线性提交历史的需求。 - 对rebase的副作用认知缺失:只要你对已经推送到远程的特性分支执行过rebase操作,就会改写本地分支所有提交的哈希值,此时本地和远程的特性分支历史已经分叉,Git的提交哈希对比逻辑会误认为远程分支存在你本地缺失的提交,所以才会提示你需要先pull,本质上不是远程真的有新的未知变更,是两边历史不匹配导致的误判。
正确操作流程
前提是该特性分支只有你一个人开发,如果有多人协作不建议随意rebase已经推送的分支。具体操作步骤如下:
- 初始化仓库并新建特性分支
git clone <repository地址> cd <仓库目录> # 确保本地master是最新版本 git checkout master git pull origin master # 新建特性分支 git checkout -b feature_branch
- 第一次提交并推远程备份,同时绑定上游
# 做完第一轮开发后提交 git add . git commit -m "feat: 特性初始提交" # 推远程同时绑定上游,后续不需要再加-u参数 git push -u origin feature_branch
- 日常开发备份(不需要同步master最新代码时)
# 做完修改后提交 git add . git commit -m "feat: 新增xxx逻辑" # 本地和远程历史一致,直接推送即可 git push
- 需要同步master最新代码时执行rebase操作
# 先拉取最新的master代码 git checkout master git pull origin master # 切回特性分支执行rebase,把特性分支的所有提交挪到最新master的顶端 git checkout feature_branch git rebase master # 若出现冲突,编辑冲突文件解决后执行 git add <冲突文件名>,再执行 git rebase --continue,直到rebase完成 # 因为rebase改写了本地提交历史,需要强制推送覆盖远程的旧历史,--force-with-lease比--force更安全,会校验远程是否有你没拉的新提交 git push --force-with-lease origin feature_branch
内容的提问来源于stack exchange,提问作者PineCone
相关产品推荐
相关产品推荐

