您的合并提交显示example.txt
为BProject/master
重命名为dir-B/example.txt
. 除非使用该选项,git log
否则不遵循重命名后的文件/目录的历史记录:--follow
--follow
Continue listing the history of a file beyond renames (works only for a single file).
如果你真的很想正确显示差异,你可以重写Bproject/master
历史,就好像项目一直在一个目录dir-B
中一样,然后做一个普通的合并。这将意味着合并历史的 SHA 与 上的 SHA 无关Bproject/master
!不过,时间戳、作者和提交消息都将保留其原始值。
如果你想这样做,我建议Bproject
先单独克隆,然后在该克隆中运行它:
git-filter-branch manpage
To move the whole tree into a subdirectory, or remove it from there:
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
在您确认新历史看起来正确后,您可以将重写的版本作为远程添加到您的主项目中,并使用普通合并将其合并。