Git Rebase(变基)
在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。
rebase大法
步骤(1.1和1.2有冲突的时候才需要):
-
git rebase [basebranch] [topicbranch] [-i]
1.1. fix conflict if it exists
1.2. resolve the confilct with
git add
- git checkout [basebranch]
- git merge [topicbranch]
- git branch -d [topicbranch]
tips
:[-i]交互方式,推荐!
示例:
你决定将 server 分支中的修改整合到主分支。 使用 git rebase [basebranch] [topicbranch] 命令可以直接将特性分支(即本例中的 server)变基到目标分支(即 master)上。这样做能省去你先切换到 server 分支,再对其执行变基命令的多个步骤。
$ git rebase master server
如图 将 server 中的修改变基到 master 上
所示,server 中的代码被“续”到了 master 后面。
然后就可以快进合并主分支 master 了:
$ git checkout master
$ git merge server
至此,client 和 server 分支中的修改都已经整合到主分支里了,你可以删除这两个分支,最终提交历史会变成图最终的提交历史
中的样子:
$ git branch -d client
$ git branch -d server
变基的风险
呃,奇妙的变基也并非完美无缺,要用它得遵守一条准则:
不要对在你的仓库外有副本的分支执行变基。
如果你遵循这条金科玉律,就不会出差错。 否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。
变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。 *如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用 git rebase 命令重新整理了提交并再次推送,*
你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟。
参考:变基