当前位置: 首页 > news >正文

工作流练习

你的担心非常正确,必须立刻停止使用merge --squash

在多人协作的共享分支(master_dev)上,直接对master使用merge --squash是一个极其危险的操作。

为什么会有问题?

git merge --squash master_dev的逻辑是计算mastermaster_dev两个分支头部(Tip)之间的所有差异

如果master_dev上除了你的代码,还有同事 A 的功能代码、同事 B 的 Bug 修复(而这些代码目前都在测试中,还没准备好上生产),一旦你执行了这个命令:

  1. 你会在不知情的情况下,把同事 A 和 B 的代码全部“偷”过来。
  2. 这些未经验证的代码会被混在你的 MR 里一起上线。
  3. 这将导致严重的生产事故(污染生产环境)。

正确方案:使用“拣选模式” (Cherry-Pick Strategy)

针对你的场景(多人混杂分支 + 需要 Squash + 只需要合入你的代码),最安全、专业的做法是:基于生产基线,只“挑”出你自己的 Commit。

推荐使用带-n参数的 Cherry-Pick。

第一步:准备干净的生产基线分支

这就相当于准备一个干净的盘子,用来装你的菜。

# 1. 切换到 master 并保证最新gitcheckout mastergitpull upstream master# 2. 基于 master 创建一个新的发布分支(用于提MR)gitcheckout -b feature/release-my-feature
第二步:精准“拣选”你的代码 (核心步骤)

我们需要把你散落在master_dev上的那几十个 Commit 挑出来,同时利用-n参数实现“Squash”的效果。

命令解释:

  • git cherry-pick <commit-id>: 把某个提交再重放一遍。
  • -n(no-commit):关键参数。它会把代码改动拿过来放到“暂存区”,但不自动生成 Commit

操作方式:

  1. 查看你的提交记录
    先去git log或者在 VS Code / SourceTree 里找到你所有提交的 Commit Hash(哈希值)。
  2. 执行拣选
    假设你开发该功能一共提交了 3 次,Hash 分别是aaaaa,bbbbb,ccccc(按时间顺序)。
# 注意:一定要按提交的时间顺序,从最早的开始挑# 加上 -n 参数,这样它们不会产生 3 个 commit,而是全部堆在暂存区gitcherry-pick -n aaaaagitcherry-pick -n bbbbbgitcherry-pick -n ccccc
  • 如果是连续的一大段 Commit(比如从startend):
# 拣选一个范围 (注意:左开右闭,start 本身不包含,如果包含 start 需要用 start^)gitcherry-pick -n start_commit_hash^..end_commit_hash
第三步:解决冲突

在 Cherry-Pick 的过程中,如果你的代码和master上的现有代码有冲突,Git 会停下来让你解冲突。

  • 解完冲突后,不要运行git commit
  • 运行git add .把解完的文件标记好。
  • 如果是中途停下,可能需要git cherry-pick --continue(但在-n模式下,通常你只需要保证最后暂存区是对的即可)。
第四步:一次性提交 (实现 Squash)

当你把你所有的 Commit 都 Pick 完之后,现在你的暂存区里就是:
最新生产代码+你的完整功能代码(同事的代码完全没被包含进来)。

此时,执行一次提交:

gitcommit -m"feat: [生产合入] 完成某某核心功能,已自测通过"
第五步:推送到远程提 MR
gitpush origin feature/release-my-feature

总结

  • Merge --squash:是“一网打尽”,适合单人分支合并。共享分支严禁使用。
  • Cherry-pick -n:是“精准萃取”,适合从大杂烩分支里只把你的功能提取出来,并且还能顺便把 Commit 合并成一个,完美符合你的需求。

Tips:
如果在命令行里找 Hash 值太累,推荐使用WebStormSourceTree等图形化工具。

  • 在工具里右键点击你的 Commit -> 选择Cherry Pick-> 勾选No Commit选项,这比敲命令快得多。
http://www.jsqmd.com/news/376256/

相关文章:

  • ChatGLM3-6B新手入门:Streamlit界面快速上手
  • VibeVoice在无障碍技术中的应用:为视障用户打造语音助手
  • Qwen2.5-0.5B Instruct在Token处理中的优化实践
  • RMBG-2.0效果可复现性保障:固定随机种子、确定性CUDA运算开启指南
  • 零基础玩转Local AI MusicGen:5分钟生成你的专属BGM
  • Fish-Speech-1.5网络安全考量:语音API的安全防护实践
  • 2026年口碑好的东莞铝合金拉杆/东莞钓鱼箱拉杆厂家口碑推荐汇总 - 品牌宣传支持者
  • Qwen3-ASR-1.7B快速上手:无需命令行,3分钟启用多语种ASR
  • Qwen3-Reranker-4B模型解释性研究:理解排序决策过程
  • GME-Qwen2-VL-2B-Instruct惊艳效果:建筑图纸与施工说明文本自动对齐
  • 2026年靠谱的淮安日字梁锯切机/锯切机热门厂家推荐汇总 - 品牌宣传支持者
  • 2026年初,探寻武汉地区值得关注的小学英语教育服务 - 2026年企业推荐榜
  • BGE Reranker-v2-m3应用场景:智能客服问答系统优化
  • 2026年内开窗厂家权威推荐榜:97极窄双内开系统窗、密封窗、悬浮推拉窗、折叠窗、电动升降窗、隔热节能窗、静音门窗选择指南 - 优质品牌商家
  • 紧急分享!AI应用架构师解读金融市场AI监控系统风险评估方法
  • 2026年质量好的罗拉冷弯/日字梁冷弯厂家选择参考建议 - 品牌宣传支持者
  • 深入解析:为什么用 Python 处理 Excel?
  • 2026年隔热节能窗公司权威推荐:107外开系统窗/110双内开系统窗/116外开窗纱一体系统窗/116外开系统窗/选择指南 - 优质品牌商家
  • 2026年杭州青少年女款内衣优质生产商综合评估报告 - 2026年企业推荐榜
  • 2026年比较好的长沙GEO营销/长沙GEO网站综合评价推荐厂家 - 品牌宣传支持者
  • SQL优化实战:索引策略让查询速度飙升10倍!
  • 【教程4>第10章>第6节】基于FPGA的图像直方图均衡化算法——FPGA设计模块划分与分析
  • 2026年有能力的长沙网站开发建设/长沙网站开发最新推荐公司 - 品牌宣传支持者
  • 【教程4>第10章>第7节】基于FPGA的图像直方图均衡化算法——图像256区间直方图提取模块
  • 免装输入法剪贴板,悬浮置顶存多行超实用
  • 18.测试波形的采集策略
  • 【Claude Code解惑】逆向工程:让 Claude Code 辅助分析二进制与混淆代码
  • 一键加密隐藏视频,专属格式播放工具
  • RDMA Send 中的内联优化:原理、代码与延迟分析
  • 【课程设计/毕业设计】基于web的游戏陪玩俱乐部管理系统的设计与实现基于springboot的线上陪玩店系统【附源码、数据库、万字文档】