rebase是什么?如何使用rebase命令呢?下面我们就如何来使用git rebase命令研究一下。
我们知道在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。事实上git rebase 和git merge 做的事其实是一样的。它们都被设计来将一个分支的更改并入另一个分支,只不过方式有些不同。
merge 命令示例
git checkout feature git merge master
这样feature 分支中新的合并提交(merge commit)将两个分支的历史连在了一起
Merge 好在它是一个安全的操作。现有的分支不会被更改
每次合并上游更改时 feature 分支都会引入一个外来的合并提交。如果上游分支 非常活跃的话,这或多或少会污染你的分支历史
Rebase 命令示例
git checkout feature git rebase master
它会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来
但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。
在对两个分支进行rebase时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行应用。 你创建了一个特性分支 server,为服务端添加了一些功能,提交了 C3 和 C4。 然后从 C3 上创建了特性分支 client,为客户端添加了一些功能,提交了 C8 和 C9。 最后,你回到 server 分支,又提交了 C10。
假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想merge server 中的修改,因为它们还需要经过更全面的测试。 这时,你就可以使用 git rebase 命令的 --onto 选项,选中在 client 分支里但不在 server 分支里的修改(即 C8 和 C9),将它们在 master 分支上重放:
$ git rebase --onto master server client
以上命令的意思是:“取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”。 这理解起来有一点复杂,不过效果非常酷。
现在可以快进merge master 分支了。
$ git checkout master $ git merge client
接下来你决定将 server 分支中的修改也整合进来。 使用 git rebase [basebranch] [topicbranch] 命令可以直接将特性分支(即本例中的 server)rebase到目标分支(即 master)上。这样做能省去你先切换到 server 分支,再对其执行rebase命令的多个步骤。
$ git rebase master server
rebase在开发中的使用场景
rebase 可以或多或少应用在你们团队的 Git 工作流中
本地清理
隔一段时间执行一次交互式 rebase,你可以保证你 feature 分支中的每一个提交都是专注和有意义的。你在写代码时不用担心造成孤立的提交——因为你后面一定能修复
下面的命令对最新的 3 次提交进行了交互式 rebase:
git checkout feature git rebase -i HEAD~3
你实际上没有移动分支——你只是将之后的 3 次提交合并了
交互式 rebase 是在你工作流中引入 git rebase 的的好办法,因为它只影响本地分支。其他开发者只能看到你已经完成的结果,那就是一个非常整洁、易于追踪的分支历史。
但同样的,这只能用在私有分支上。如果你在同一个 feature 分支和其他开发者合作的话,这个分支是公开的,你不能重写这个历史。
以上是Git中git rebase怎么用来合并分支的详细内容。更多信息请关注PHP中文网其他相关文章!