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 会重写历史,这在个人项目中通常没问题,但在公共分支上使用时可能会引起问题,因为它会影响其他协作者的历史。

相关推荐
Jammingpro12 小时前
【Git版本控制】Git初识、安装、仓库初始化与仓库配置(含git init、git config与配置无法取消问题)
java·git·elasticsearch
shark18 小时前
无需放弃变更、关闭占用程序!用暂存区和 git底层命令实现 Git 变更备份
git·shell·自动化运维
_poplar_18 小时前
15 【C++11 新特性】统一的列表初始化和变量类型推导
开发语言·数据结构·c++·git·算法
北城笑笑19 小时前
Git 10 ,使用 SSH 提升 Git 操作速度实践指南( Git 拉取推送响应慢 )
前端·git·ssh
蓁蓁啊1 天前
GIT使用SSH 多账户配置
运维·git·ssh
相与还1 天前
IDEA和GIT实现cherry pick拣选部分变更到新分支
git·elasticsearch·intellij-idea
刘志辉2 天前
git指令
git
2501_916766542 天前
【Git学习】初识git:简单介绍及安装流程
git·学习
孤独的追光者2 天前
Git 完整流程:从暂存到推送
git
平平无奇。。。2 天前
版本控制器之Git理论与实战
linux·git·gitee·github