问题背景
现在,我正在我本地的私人开发分支feat/wu-sunflower/do_some_thing(对应云端分支origin/feat/wu-sunflower/do_some_thing),进行开发。
同时我的同事对代码也进行了一些改动(并且已经merge进了团队云端分支origin/dev)。我应该如何通过git rebase,与我的同事同步开发进度?
步骤
步骤 1:确保工作目录干净
检查工作目录中是否有未commit的修改。
bash
git switch feat/wu-sunflower/do_some_thing # 切换到我的分支
git status
如果有,请先commit,或者执行git stash
把这些变动临时藏匿起来。
bash
# 1. 正在开发中,修改了文件 A 和 B(未提交)
git status # 显示有修改
# 2. 需要拉取团队最新代码
git stash -m "开发到一半的功能 A"
# 3. 现在工作目录干净了,可以拉取代码
git pull origin dev
# 4. 恢复之前的修改
git stash pop # 或 git stash apply
# 5. 如果有冲突,手动解决后继续开发
步骤 2:拉取团队最新代码(不自动合并)
bash
git fetch origin dev # 获取云端 dev 分支的最新提交
步骤 3:变基(rebase)我的分支到最新 dev
bash
git rebase origin/dev # 将当前分支变基到 origin/dev
此时可能出现冲突(因我的修改和同事的修改冲突)。
步骤 4:解决冲突(如果有)
定位冲突文件:
bash
git status # 查看冲突文件列表
然后手动编辑文件,解决冲突(文件中的 <<<<<<<
和 >>>>>>>
标记区域)。
之后手工告知git,冲突已解决:
bash
git add <冲突文件路径> # 将解决后的文件加入暂存区
继续变基:
bash
git rebase --continue
重复此过程直到所有冲突解决。
若需放弃变基:
bash
git rebase --abort # 回到 rebase 前的状态
步骤 5:推送更新到我的云端分支
shell
git push origin feat/wu-sunflower/do_some_thing --force-with-lease
此操作将把变基后的本地仓库推送到云端分支origin/feat/wu-sunflower/do_some_thing
最终效果
css
我的原始提交: A--B--C [feat/wu-sunflower/...]
团队 dev 更新: D--E--F [origin/dev]
变基后: D--E--F--A'--B'--C' [feat/wu-sunflower/...]
(A'
, B'
, C'
是我的提交在最新 dev
上的重新应用)