code Merge(qcc)

背景

  1. test 分支是上上周根据 master创建的分支并且将新的代码提交到远端分支了;
  2. zhou 分支是上周根据 master创建的分支并且将新的代码提交到远端分支了;
  3. 然后现在将 zhou 分支代码通过 rebase 方式合并到了 master 上。
  4. 如何通过 rebase 方式将test 分支合并到 master?

回答

要将 test 分支通过 rebase 方式合并到已包含 zhou 分支代码的 master,核心是先同步 master 最新代码到 test,再解决冲突,最后推送,步骤如下:

1. 确保本地分支同步远程最新状态

先拉取所有远程分支的更新,避免基于旧代码操作:

bash

bash 复制代码
# 拉取远程所有分支的最新提交(不合并到本地分支)
git fetch origin

2. 切换到 test 分支,同步 master 最新代码(关键步骤)

因为 master 已合并 zhou 分支,需先将 master 的最新代码 "变基" 到 test 分支,让 test 在最新 master 基础上继续开发:

bash

bash 复制代码
# 切换到本地 test 分支
git checkout test

# 拉取远程 test 分支的最新提交(若多人协作,确保本地代码最新)
git pull origin test

# 执行 rebase:将 master 的最新代码合并到当前 test 分支
git rebase origin/master

3. 解决 rebase 过程中的冲突(若有)

如果 test 分支和 master(含 zhou 代码)修改了同一文件,会触发冲突,终端提示 CONFLICT (content): Merge conflict in 文件名

  1. 打开冲突文件,找到冲突标记(<<<<<<< HEAD=======master 的代码,=======>>>>>>> 提交IDtest 的代码);

  2. 手动编辑文件,保留正确代码并删除冲突标记;

  3. 标记冲突已解决,继续 rebase 过程:

    bash

    csharp 复制代码
    # 添加已解决冲突的文件
    git add <冲突文件路径>  # 或用 git add . 批量添加所有修改文件
    
    # 继续执行剩余的 rebase 步骤
    git rebase --continue
  4. 若需放弃 rebase,执行 git rebase --abort 回到操作前状态。

4. 推送 rebase 后的 test 分支到远程

rebase 会改写 test 分支的提交历史,需强制推送覆盖远程 test 分支(仅在个人分支或确认无协作冲突时使用):

bash

bash 复制代码
# -f 强制推送,因为 rebase 改变了提交历史
git push -f origin test

关键说明

  • 相比 mergerebase 会让 test 分支的提交 "附着" 在 master 最新提交之后,避免产生合并节点,让提交历史更线性;
  • test 分支是多人协作分支,强制推送前需告知队友,避免覆盖他人提交;
  • 合并前建议本地测试 test 分支代码,确保与 master 合并后功能正常。

然后再将 test 分支合并到 master 上时,是直接merge test 分支就行了吧?

是的,在完成 test 分支基于最新 masterrebase 操作后,直接用 merge 方式将 test 合并到 master 是更简单、安全的选择,具体原因和操作如下:

为什么推荐直接 merge

经过前面的 git rebase origin/master 操作后,test 分支的提交历史已经 "附着" 在 master 最新提交之后(两者历史完全线性,无分叉)。此时执行 merge 会触发 "快进合并(fast-forward)"

  • 无需创建新的合并提交,直接将 master 指针移动到 test 分支的最新提交;
  • 保持 master 分支历史整洁,避免多余的合并节点。

具体操作步骤:

  1. 切换到 master 分支并拉取最新代码:

    bash

    bash 复制代码
    git checkout master
    git pull origin master  # 确保本地 master 是远程最新状态
  2. 合并 test 分支到 master

    bash

    bash 复制代码
    git merge test
    • 此时终端会提示 Updating xxxxxxx..yyyyyyy(快进合并成功),或生成一个简单的合并提交(若有极小概率的新提交冲突)。
  3. 推送合并结果到远程 master

    bash

    perl 复制代码
    git push origin master

特殊情况说明:

如果在你 rebase test 之后、合并到 master 之前,有其他人向 master 推送了新代码,此时 merge 可能会触发少量冲突(概率较低)。解决方式:

  1. 再次执行 git pull origin master 同步最新 master 代码;
  2. 若提示冲突,按常规方式解决(编辑文件 → git add .git commit);
  3. 再推送 git push origin master

总结:

test 分支已通过 rebasemaster 同步的前提下,直接 git merge test 是最优选择,既简单又能保持提交历史的整洁性。整个流程可理解为:rebase 负责 "对齐基线、解决冲突",merge 负责 "最终合并到目标分支",两者配合使用效果最佳。

相关推荐
HIT_Weston4 小时前
43、【Ubuntu】【Gitlab】拉出内网 Web 服务:静态&动态服务
前端·ubuntu·gitlab
逻辑棱镜4 小时前
Git 分支管理与提交信息规范 (v1.0)
git·github·团队开发·代码规范·敏捷流程
悦悦欧呐呐呐呐6 小时前
git 设置邮箱和用户名
git
正经教主6 小时前
【Git】Git06:Git 管理 Android 项目教程(含GitHub)
android·git
艾莉丝努力练剑10 小时前
【Git:多人协作】Git多人协作实战:从同分支到多分支工作流
服务器·c++·人工智能·git·gitee·centos·项目管理
小安同学iter15 小时前
三台服务器,一套流水线:如何实现无缝自动化部署?
gitlab·jenkins
liuyao_xianhui21 小时前
版本控制器git--gdb/cgdb
linux·运维·服务器·git
徐同保1 天前
如何使用GitKraken把git项目迁移到另一个平台,并保存所有提交记录,例如把github上的项目,迁移到gitee
git·gitee·github
高小秋1 天前
项目开发使用 git工作流插件 -- jgitflow开发实践
git
tealcwu1 天前
【软件工程】浅析Git message, version, changelog之间的关系
git