git merge 和 git rebase

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

相关推荐
LannyChung7 小时前
PowerShell 下 git log 中文乱码的完整排查与解决
windows·git
import_random8 小时前
[git]本地main,origin/main,远程main(关系2)
git
golang学习记8 小时前
Zed Git重大更新:目录级对比支持分栏Diff
git·vscode·zed
阿俊-全栈开发13 小时前
LikeShop 单商户高级版二开项目的 Git 分支管理与版本发布规范
git·likeshop·likeshop开源商城·likeshop多商户
努力弹琴的大风天13 小时前
TortoiseGit 仓库不显示绿色对号解决方案
git·tortoisegit·图标显示
我不会插花弄玉16 小时前
GitHub实操【由浅入深-Git】
git·github
说实话起个名字真难啊16 小时前
Git常用小问题笔记
笔记·git·elasticsearch
橙露1 天前
git简明教程以及资源分享
大数据·git
codigger2 天前
别再靠"最终版-改"活下去了:一篇讲透 Git 与 GitHub
git·程序员·github·编程·控制版本
JustNow_Man2 天前
【Harness】本地文本向量化搜索解决方案--qmd
git·python·算法