git merge 和 git rebase

git mergegit rebase 都是 Git 版本控制系统中用于整合不同分支的变更的方法,但它们在处理变更的方式上有所不同。

git merge

当你使用 git merge 命令时,Git 会将两个分支的变更合并到一起。这通常意味着在当前分支上创建一个新的"合并提交"(merge commit),这个提交会将两个分支的历史连接起来。这种方式保留了两个分支各自的历史和变更顺序。

例子

假设你有一个名为 main 的分支,你从这个分支创建并切换到了一个名为 feature 的新分支来开发一个新功能。在 feature 分支上,你提交了三个变更(commit A、B、C)。与此同时,main 分支也有了更新(commit D)。现在,你想要将 feature 分支的变更合并回 main 分支。

复制代码
main:   D
        |
A---B---C feature

如果你在 main 分支上执行 git merge feature,Git 会创建一个新的合并提交(E),将 feature 分支的变更合并到 main 分支。

复制代码
main:   D---E
        |   /
A---B---C feature

git rebase
git rebase 命令会将一系列提交从一个分支上摘下来,然后重新应用("replay")到另一个分支上。这通常用于将一个分支上的变更"移植"到另一个分支的最新提交上,从而创建一个更干净、更线性的历史。

例子

使用相同的场景,如果你在 feature 分支上执行 git rebase main,Git 会将 feature 分支的提交(A、B、C)重新应用到 main 分支的最新提交(D)上。

复制代码
main:   D
        |
A'---B'---C' feature

这里的 A'、B'、C' 是 A、B、C 提交的"新版本",它们是在 main 分支的 D 提交之后重新应用的。这样,feature 分支的历史就"重写"了,没有了合并提交。

总结

  • 使用 git merge 时,变更是"合并"在一起的,会创建一个新的合并提交。
  • 使用 git rebase 时,变更是"移植"到另一个分支上的,会创建新的提交,但不会创建合并提交。

注意git rebase 会重写历史,这在个人项目中通常没问题,但在公共分支上使用时可能会引起问题,因为它会影响其他协作者的历史。

相关推荐
Klaus_Wei3 小时前
git 高级命令模式典型应用--“同步云端 + 清理垃圾分支”的一键命令
git·git高级用法·git同步云端·git清理垃圾分支
妙娲种子4 小时前
配置git/创建第一个智能相册保存快照
git
what_20184 小时前
git一个账号在两台电脑登录 出现不同用户名
git
困鲲鲲4 小时前
ROS2系列 (13) : 常用Git指令入门(本地Git)
git·ros2
☆cwlulu9 小时前
git分支管理详解
开发语言·git·青少年编程
脑子不好的小菜鸟11 小时前
用vscode连接远端ubuntu无法git push,vscode无法连接centos
git·vscode·ubuntu·centos
__Witheart__12 小时前
Git 如何修改已有的分支名称
git
秦jh_15 小时前
【git】分支管理
git
百锦再19 小时前
第5章 所有权系统
运维·git·python·eclipse·go·github·负载均衡
DW_DROME1 天前
git worktree (镜像站加速)
git