别再只用 add 和 commit 了

脚本小子小柯 专家 13小时前 257 浏览 8 点赞 约 2 分钟

说实话,刚入职那会儿我也觉得只要会 git pushgit pull 就够用了。直到有一次因为没搞清楚分支合并逻辑,把同事正在写的代码给覆盖了,被 Lead 叫过去谈话,才意识到只会基础命令在实际开发流程里有多危险。

在公司团队协作里,我们不仅仅是在写代码,更是在管理代码的历史轨迹。如果你还在机械地用 git merge,可能很快就会发现你的提交历史(Commit History)乱得像一团乱麻。

到底选 git merge 还是 git rebase?

这是很多中级开发者都会纠结的问题。虽然它们的目的都是要把一个分支的改动合并进来,但底层的逻辑完全不同。

  • git merge (合并模式):
当你执行 git merge main 时,Git 会创建一个全新的“合并提交”(Merge Commit)。它会保留完整的开发轨迹:分支从哪儿分出来的、在哪儿又合回来的,一清二楚。
- 优点: 绝对安全,不会破坏历史,真实记录了所有的操作。
- 缺点: 如果团队频繁进行这种操作,你的 Git Graph 会出现大量的交叉线,看起来非常“乱”。

  • git rebase (变基模式):
如果你执行 git rebase main,Git 会把你当前分支的提交“拆下来”,先让分支对齐到 main 的最新位置,然后再把你的提交一个一个重新“贴”上去。
- 优点: 提交历史是一条直线,非常干净,方便 Code Review。
- 缺点: 它在“重写历史”。这也就是为什么我总结了一个避坑指南:

> 避坑准则: 只对你自己正在开发的私有分支用 rebase;千万不要对已经推送到远程、且有其他人在协作的分支用 rebase。

如果你在公共分支上用了 rebase,会导致其他同事的代码历史全部对不上,到时候修冲突的痛苦,真的能让你怀疑人生。

实战中的典型场景

假设你在做 feature 分支,此时 main 分支有了新的更新,这时候该怎么选?

1. 如果你追求极致的提交整洁,且这个 feature 分支只有你一个人在弄,那就用:

git checkout feature-branch
git rebase main

2. 如果你所在的团队对历史记录的完整性有硬性要求,或者你担心操作失误,那就老老实实走合并流程:

git checkout feature-branch
git merge main

我个人的习惯是,在本地开发阶段用 rebase 来保持提交记录的线性,但在准备合并到主干分支(如 develop 或 main)时,尽量遵循团队规定的合并策略。

工作流AI落地githubgit

全部回复 (9)

摸鱼攻城狮 初级 13小时前
其实光看文档还是容易懵,建议直接上手练几个 rebase 和 merge 的冲突场景,那种肌肉记忆比看十遍文档都管用。
0 回复
脚本小子小柯 专家 13小时前
看到 VSS 真的瞬间破防,那时候改个代码都要战战兢兢的,生怕把整个库给搞崩了。现在的 Git 流程简直是降维打击。
0 回复
老阿伟的日常 初级 13小时前
老版本那种权限控制真的阴间,现在起码有个分支随便造。不过你现在公司也用 Git 吗?
0 回复
杭漂码农 专家 13小时前
要是能再多讲讲分支合并冲突的处理逻辑就更完美了,我对那一块儿一直有强迫症。
0 回复
副业中测试 中级 13小时前
我上次误删了本地分支还没push,差点当场表演一个原地去世,还好靠 cherry-pick 把代码捞回来了,当时心跳起码两百。
0 回复
创业者阿杰 中级 13小时前
真的,我上次就是靠这个把一个紧急修复直接挪到生产分支,省去了把开发环境里那些还没测完的乱七八糟代码全带过去的风险。
0 回复
极客Ray 高级 13小时前
我也在用 alias,不过我更喜欢直接配置 git config 里的 alias,这样在任何 shell 下都能用,不用担心换了环境就失效了。
0 回复
脚本小子阿强 初级 13小时前
我也觉得,光看那种增删改查的命令真的没用。有没有推荐那种专门讲 rebase 或者是处理复杂 conflict 的进阶教程?感觉这块才是拉开差距的地方。
0 回复
早八人码农 专家 13小时前
要是能把 rebase 和 merge 的场景区别讲得再透彻点就完美了,这两个命令我每次用都得纠结半天。
0 回复

发表回复

支持 Markdown 格式