很多人都熟悉merge在git中的使用,但是并不是很熟悉rebase,那么首先我们先了解一下什么是rebase?⁉️
git rebase 可以将它理解为重新设置基线–变基,将你当前的分支重新设置为开始点。这样你才能知道当前所处的分支与需要进行比较的分支的差别在哪里。
rebase要基于一个分支来设置你当前的分支的基线,即当前最新跟踪的分支的最后面,这样当前分支就是最新的跟踪分支。因为这里的操作是基于文件事务进行处理的,所以不用怕中间失败会影响文件的一致性,在中间的任何过程都可以随时取消rebase事务。

那么git rebase 和 git merge有什么区别呢?

rebase会把当前分支的commit放到公共分支的最后面,所以叫做变基,就好像从公共分支又重新拉出来这个分支一样,基线发生改变。
举个栗子?如果你从master拉了个feature分支出来,然后你提交了几个commit,这个时候刚好有团队中的其他成员把他开发的东西合并到了master了,这个时候master就比你拉分支的时候对了几个commit,此时就是我们的变基rebase登场的时候了,我们现在使用git rebase,这样就会把你的commit放到刚才那个人的commit后面~

merge会把公共分支和当前的commit合并在一起,形成一个新的commit提交

‼️注意:
  • 不要在公共分支使用rebase
  • 本地和远端对应同一条分支优先使用rebase,而不是merge
那么问题来了,为什么不要在公共分支使用rebase?

因为往后放的这些commit都是新的,这样其他从这个公共分支拉出分支的人都需要在rebase,相当于你rebase东西进来,就都是新的commit了?

  1. 1-2-3是现在的分支状态
  2. 这个时候从master拉出来一个分支member
  3. 然后master提交了4-5,而member分支提交了6-7
  4. 这时候master分支状态就是1-2-3-4-5,member分支状态变成了1-2-3-6-7
  5. 如果在member分支上使用rebase master,那么member分支就变成了1-2-3-4-5-6-7
  6. 但是如果使用merge,就变成了1-2-3-6-7-8…|4-5|
  7. 会多出来一个8,这个8就是将4-5合并的提交

rebase有好有坏,比如你自己在开发分支一直在做,然后你需要把主线的修改合到你的分支上做一次集成,这种情况就用rebase比较好,将自己的提交都放在主线修改的后面,但是还有一个重要问题,rebase的话,加入我的分支是从3拉出来的,rebase完了以后就不知道我是从哪个分支拉出来的了

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐