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

相关推荐
和你一起去月球1 小时前
TypeScript - 函数(下)
javascript·git·typescript
我不是程序猿儿2 小时前
【GIT】TortoiseGit的变基(Rebase)操作
git
yyycqupt9 小时前
git使用(一)
git
Kkooe13 小时前
GitLab|数据迁移
运维·服务器·git
Beekeeper&&P...13 小时前
git bash是什么,git是什么,git中的暂存区是什么,git中的本地仓库是什么,git中工作目录指的是什么
开发语言·git·bash
Stara051118 小时前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
lsswear18 小时前
GIT 操作
git
勋勋勋勋小勋勋18 小时前
git分支合并某一次提交
git
PandaCave19 小时前
git常用命令以及注意事项总结
git