问题一:
有一条代码线master线,同时有条新需求开发线dev线。master线从B开出分支dev线后,一直在做bug修复(C,D)。如下图:
此时,dev线需要合并master线修复的bug,以免重复开发。那我们可以用到git rebase命令。
执行:git rebase --onto master dev,成功后,dev线就会合并C和D提交的记录。如下图:
疑问:按照书中的解释,
git rebase --onto master dev 命令属于用法3,
参数中 newbase是master sine是deve, till 应该是当前分支 dev
因此rebase --onto master dev 命令的解释不就是 将当前分支(dev) dev之后的提交到 till提交点(也是dev)之间的提交 应用到master上,好像这种理解没有一个提交会应用到master上吧?
问题2:git rebase master 命令如何理解?
你被书上那些弯弯绕绕的东西搞糊涂了,也想的太复杂了,实际开发几乎用不到这么多复杂的玩意。简单点理解就行了,你可以把rebase理解成
带有commit排序功能的merge
,也就是rebase的效果就是merge之后再按照commit时间顺序
重排(而merge则是按照提交顺序排列
的)所以你其实只要先把rebase的地方全部换成merge就理解了吧?比如
git rebase master
就等同于git merge master
,之后再重排commit,也就是按照commit时间顺序合并master分支到当前的分支上,而不是按照提交顺序合并。同理,git rebase --onto master dev
的效果就是把dev分支合并到master分支去。这里官方文档描述的其实更明确:并且官方文档还有个示例:
rebase最直观的作用其实就是修剪枝叉,如果通过merge合并,在分支图上(终端下可以用命令
git log --oneline --graph
查看)可能会看到分支互相合并产生的枝叉,被rebase过的提交记录会非常好看,就是一条笔直的树干另,这些东西更建议去看git官方文档,会更清晰一些,比如你的这些东西都可以在
git rebase --help
看到: