Git合并时,被合并分支中更改的文件显示Deleted,找不到希望应用的更改?

背景

我有三个分支:master,CI和dev,master用于发不到正式环境,CI用于发不到测试环境,dev是自己的开发分支。其中dev分支需要经常和master分支保持一致,使用的是rebase操作。

问题

上周五照常在dev分支上开发,提交commit,rebase master之后,checkout到CI分支,将dev分支合并到CI分支时,显示两个改动的文件为Deleted(如图2所示)。但这两个文件是这一次提交的重要改动,很确认这个文件没有被删掉(如图1所示),而且通过各种方式查看表明这些文件是存在的。

  • 使用git diff CI dev表明这俩文件存在并且有差异
  • 使用git show commitId是能够看到改动的文件的

dev分支最新的commit上的改动图1

合并时显示Deleted图2

两个分支的公共祖先commit图3 两个分支的公共祖先commit

异常

  • 感觉像是git在dev分支上找不到InquiryReportDetailDTO和InquiryReportServiceImpl这两个文件
  • 这两个文件所在的servicePack文件夹是重命名过的
  • 在CI分支上执行git merge dev是将dev分支上从公共祖先节点往后的四个节点的变化往CI分支上合并,出现了上述问题,在解决上述问题的过程中,我尝试一个commit一个commit地往CI上合,是成功的,并且达到预期结果的

以上

上述问题实在奇怪,自己解决不了,求助于各位大佬,希望知道的大佬不吝赐教:为什么以及怎么办。

万分感谢!

阅读 2.9k
1 个回答

自问自答

  • 解决方案:其实挺多的,自己在异常中提到的也算一种,这里采纳的方案也是一种
  • 关键是产生的原因,这里自我总结一下:

    • CI分支上最新的提交相对于公共祖先节点是知道文件重命名的,而dev分支上最新提交相对于公共祖先节点却不知道文件重命名了,所以在合并的时候dev上的文件就被git识别为delete了(至于为什么,个人猜测是因为隔了几个commit)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题