AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## 3.6 变基 ### 5.5.1 变基操作 变基的原理是找到两个分支的最近共同祖先提交记录,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底,最后以此将之前另存为临时文件的修改依序应用。 通过 `rebase` 命令可以执行变基操作: ``` $ git rebase [branch] ``` 假设现在有仓库状态如下: ![](https://img.kancloud.cn/e6/c6/e6c6d30a79edb3d39d6bbaaca7202c21_800x383.png) 执行`git rebase master`\(当前分支为experiment\)后: ![](https://img.kancloud.cn/91/0b/910b5deb713c24f12eae4004c9c28998_800x231.png) ### 5.5.2 更有趣的变基例子 在对两个分支进行变基时,所生成的重放并不一定要在目标分支上应用,也可以指定另一个分支进行应用。该操纵通过 `--onto` 参数实现: ``` $git rebase --noto master server client ``` ![](https://img.kancloud.cn/69/42/6942e61bdfc2dcb32bc81cc9ddb11bf2_800x466.png) Git 会取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重演一遍: ![](https://img.kancloud.cn/03/ea/03ea39ab65924e2697895efa09c76fd5_800x319.png) ### 5.5.3 变基风险 变基的使用需要遵守一条准则:**不要对在你的仓库外有副本的分支执行变基。** 变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用`git rebase`命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟。 ### 5.5.4 用变基解决变基 当团队中有人将推送至仓库的分支变基了,而你恰巧基于此分支进行了开发,可以通过`git pull --rebase`命令更新本地仓库,虽然不能避免伤痛,但能有所缓解。该命令相当于以下两个命令: ``` $ git pull $ git rebase ``` 它的原理是将在远程上执行的变基,在本地库上执行了一遍。