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

相关推荐
Howie Zphile6 小时前
Git 拉 NocoBase 2.0 beta(next 分支),并“每天自动更新 + 自动编译 + 自动重启”
大数据·git·elasticsearch
吕司7 小时前
Git分支管理
git
黑屋里的马8 小时前
GitExtension下载、安装
git·gitextension
Geoking.8 小时前
Git 中的 Rebase 与 Merge:原理、区别与最佳实践
git
invicinble10 小时前
一文了解git
大数据·git·elasticsearch
我命由我1234510 小时前
Git 初始化本地仓库并推送到远程仓库解读
运维·服务器·经验分享·笔记·git·学习·学习方法
爱码小白11 小时前
Git学习笔记
笔记·git·学习
skywalk816312 小时前
sudo apt upgrade git 报错
git
_运维那些事儿13 小时前
GitLabCI/CD语法
linux·服务器·git·ci/cd·gitlab·运维开发·devops
huohuopro13 小时前
git基本使用
大数据·git·elasticsearch