Git Rebase与Git Merge的使用与区别
Git Rebase vs. Git Merge:选哪个?🤔¶
目的:搞懂 Git 这两种合并分支的酷炫方式,以后合并代码不再纠结!
内容:
咱们先不讲那些复杂的理论,直接上例子,保证你一看就明白!
场景模拟:团队合作开发新功能 🚀¶
假设你和小伙伴们正在一起开发一个超酷炫的新功能,每个人负责一部分:
- 你:负责开发用户登录界面 (在
feature/login
分支) - 小伙伴 A:负责开发商品展示页面 (在
feature/product
分支) - 主分支:
main
分支,是大家共同的基础
Git Merge:简单粗暴,历史全记录 📖¶
-
你完成了登录界面的开发,想要把代码合并到
main
分支:-
结果:Git 会创建一个新的合并提交(merge commit),把你的
feature/login
分支和main
分支的最新代码合并在一起。 -
特点:简单!
main
分支的历史记录会完整保留所有分支的开发过程,就像一本详细的日记。
-
-
小伙伴 A 也完成了商品展示页面的开发,同样合并到
main
分支:-
结果:又多了一个合并提交!
-
潜在问题:如果很多人都在不同的分支上开发,
main
分支的历史记录可能会变得很乱,像蜘蛛网一样 🕸️。
-
Git Rebase:乾坤大挪移,历史更清晰 ✨¶
-
你完成了登录界面的开发,这次咱们用
rebase
:git checkout feature/login # 切换到 feature/login 分支 git rebase main # 把 main 分支的最新代码“垫”到你的 feature/login 分支下面 git checkout main git merge feature/login # 快速向前合并
-
结果:
rebase
会把你的feature/login
分支上的提交“移动”到main
分支的最新提交之后。就像是把你的分支“嫁接”到了main
分支上。- 然后再次在
main
进行merge
时,由于feature/login
是直接从main
分支“生长”出来的,所以可以直接快速合并(fast-forward),不会产生额外的合并提交。
-
特点:干净!
main
分支的历史记录会是一条直线,非常清晰。
-
-
小伙伴 A 也用
rebase
合并:-
结果:同样,
main
分支的历史记录依然保持一条直线。 -
潜在问题:
rebase
会改写提交历史,如果你已经把feature/login
分支推送到远程仓库,并且其他人在这个分支上工作,就不要用rebase
了,否则会造成混乱。
-
总结:选哪个?¶
特性 | Git Merge | Git Rebase |
---|---|---|
历史记录 | 完整,包含所有分支的开发过程 | 简洁,一条直线 |
操作难度 | 简单 | 稍复杂,需要理解“变基”的概念 |
适用场景 | 适合小型团队,或者希望保留完整开发历史的情况 | 适合个人开发,或者希望保持主分支历史清晰的情况 |
注意事项 | 如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 rebase ! |
如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 rebase ! |
比喻 | 像一本详细的日记,记录了所有发生的事情 | 像一棵树,主干清晰,分支从主干生长出来 |
口诀 | merge 虽乱心不乱,rebase 虽直易出错 |
merge 虽乱心不乱,rebase 虽直易出错 |
趣味小练习 🎮¶
- 自己创建几个分支,分别用
git merge
和git rebase
进行合并,看看有什么不同。 - 试着画出两种合并方式的提交历史图,加深理解。
- 思考一下,在你的团队项目中,哪种合并方式更适合?
希望这个文档能帮助你更好地理解 Git Rebase 和 Git Merge!记住,实践出真知,多动手试试,你会发现 Git 其实很有趣!😉