如何同步feature分支与master分支?git rebase操作相关疑问
问题解答
执行git rebase前必须保证当前工作区没有未处理的改动,你之前操作没有触发预期的冲突提示,核心原因就是带着未提交的修改直接执行了rebase,Git没有进入正常的逐提交重放比对流程。
针对你问的「是否需要先执行git add、git commit提交修改到本地」,答案是:这是可行方案之一,且完全不需要执行git push,本地提交不会影响远端仓库;除此之外也可以选择暂存改动的方式,两种处理方式的操作逻辑如下:
- 本地提交方案:直接对未提交的修改执行
git add .、git commit把改动存到本地版本库,之后执行rebase时,Git会把你feature分支上所有领先于旧master的提交(包括你刚提交的本地进度)逐个重放到最新的master分支基线上,只要提交内容和master的更新有重叠冲突,就会正常弹出冲突提示,你按提示解决冲突后执行git add标记已解决、再跑git rebase --continue即可走完同步流程。 - 临时暂存方案:如果你不想把半完成的开发内容打成正式提交,可以执行
git stash把所有未提交的改动(包含已暂存、未暂存的修改)临时存到Git的存储栈,等rebase全流程走完后,再执行git stash pop把之前暂存的改动恢复到工作区,如果恢复的内容和rebase后的代码有冲突,Git同样会给出冲突提示,手动解决即可。
注意:如果带着未提交的改动直接跑rebase,Git首先会做工作区一致性校验:如果检测到未提交改动涉及rebase过程中要修改的文件,要么直接报错终止操作、提示你先处理工作区改动;要么在部分非默认配置下会把未提交的改动直接混入重放流程,跳过逐提交比对的逻辑,自然就不会出现你预期的冲突提示,最终同步结果也会不符合预期。
以下是可直接复用的feature分支同步master的标准操作流程:
# 1. 切到master分支拉取最新的远端更新 git checkout master git pull # 2. 切回自己的feature分支 git checkout <你的feature分支名> # 3. 处理当前未提交的改动,二选一即可 # 选项A:提交到本地仓库 git add . git commit -m "chore: 暂存当前开发进度" # 选项B:临时暂存改动 # git stash push -m "临时存储开发进度" # 4. 执行rebase对齐master最新基线 git rebase master # 5. 出现冲突时,手动编辑冲突文件解决后执行 # git add <已解决的冲突文件路径> # git rebase --continue # 重复这一步直到rebase流程走完 # 6. 如果之前选了stash方案,rebase完成后恢复暂存的改动 # git stash pop # 恢复时如果有冲突,手动解决后add即可
内容的提问来源于stack exchange,提问作者Liu Xu
相关产品推荐
相关产品推荐

