乐闻世界logo
搜索文章和话题

Git rebase 和 Git merge 之间的区别是什么?

2个答案

1
2

Git rebaseGit merge 都是Git中用于合并不同分支上的更改的命令,但它们以不同的方式处理合并操作。

Git merge:

  • merge 命令通常用于将两个不同的分支合并到一起。
  • 当你执行 git merge 时,Git会创建一个新的“合并提交”(merge commit),该提交具有两个父提交:一个是当前分支的最后一个提交(HEAD),另一个是被合并分支的最后一个提交。
  • 合并提交的出现保留了项目历史的真实性,显示了一个分支合并到另一个分支的时间点。
  • 合并是一个非破坏性操作,即它不会改变已有分支的历史。

Git rebase:

  • rebase 命令用于将一个分支的更改重新应用于另一个分支上。
  • 当你执行 git rebase 时,Git会将你正在工作的分支的提交“转移”到目标分支的顶端。
  • 这种操作会改写历史,因为它实际上是重新创建了那些提交,就好像你是在目标分支的当前状态下重新做了那些工作。
  • rebase 可以创造出一条更干净、线性的历史,这样当查看项目历史的时候,就像是按照时间顺序一步步地发生的。

例子: 假设你在 feature 分支上工作,并且需要将 master 分支的最新更改集成到你的 feature 分支中。你可以选择 mergerebase 来实现这个目的。

如果你选择 merge,那么Git会创建一个新的合并提交,使得 feature 分支包含了 master 分支的所有更改。这个合并提交会有两个父提交,一个指向 feature 分支的最后一个提交,另一个指向 master 分支的最后一个提交。

如果你选择 rebase,Git会将你 feature 分支上的每个提交重新应用到 master 分支的最新提交之上。结果是你的 feature 分支看起来就像是在 master 分支的最新提交之后才开始的,这就创造了一条干净的、没有分叉的历史线。但是需要注意的是,如果 feature 分支上的更改与 master 分支上的更改有冲突,你需要在 rebase 过程中手动解决这些冲突。

2024年6月29日 12:07 回复

简洁版本

  • 合并将一个分支中的所有更改合并到一次提交中的另一个分支中。
  • Rebase 说我希望我分支的点移动到一个新的起点

那么什么时候使用其中任何一个呢?

合并

  • 假设您为了开发单个功能而创建了一个分支。当您想将这些更改带回 master 时,您可能需要merge

变基

  • 第二种情况是,如果您开始进行一些开发,然后另一个开发人员进行了不相关的更改。您可能想要拉取然后重新设置基础以从存储库中的当前版本进行更改。

挤压:在两种情况下都会保留所有提交(例如:“添加功能”,然后“拼写错误”,然后“哎呀再次拼写错误”...)。可以通过压缩将提交合并为单个提交。挤压可以作为合并或变基操作的一部分来完成(--squash 标志),在这种情况下,它通常称为挤压合并或挤压变基。

Pull 请求:流行的 git 服务器(Bitbucket、GitLab、GitHub 等)允许配置如何在每个存储库的基础上合并 Pull 请求。按照惯例,UI 可能会显示“合并”按钮,但该按钮可以使用任何标志执行任何操作(关键字:合并、变基、挤压、快进)。

2024年6月29日 12:07 回复

你的答案