问题

Git合并分支时,可以用merge,也可以用rebase,当使用rebabse时,我们可能会遇到自己的feat分支被动地合并了其它分支代码的问题。
也许你自己的feat分支已经提交并push了所有代码并且此后无新的提交,但是某一天当你观察分支时,你可能会惊讶地发现自己的feat分支有可以pull的update,然后你的feat分支没有其他人提交代码,而且你自己也没在remote仓库中合并其它分支的代码,为什么就突然提示更新了呢?

原因

测试了一下,发现问题是这样产生的:

  1. 创建dev分支;
  2. 从dev分支checkout一个featA分支;
  3. 经过一段时间,featA分支有了一些commits,push到了featA remote;
  4. 同时这段时间里,dev 分支remote也有了一些提交;
  5. featA分支不merge dev remote最新的代码,直接提交MR到dev;
  6. dev提示featA已经落后了一些commit节点;(落后的commit节点数为featA从dev checkout之后,dev上的commits数)
  7. 在dev remote执行reabse、然后merge;
  8. 结束之后,featA分支会merge到dev remote最新的代码,本地执行git fetch,本地会看到featA有可以pull的update。

所以,如果你也遇到了同样的问题,不用觉得奇怪,因为处理Merge Request时,你的分支已经被动地合并了其它分支的代码。

系列推荐
Git常见问题(一)——本地tag和远程仓库tag不一致

Q.E.D.


学而时习之,不亦说乎? 有朋自远方来,不亦乐乎?