执行git pull --rebase后未出现冲突标记,如何识别代码冲突部分?
别担心,这种情况其实是Git帮你自动完成了三方合并——它认为两边的变更没有冲突,可以直接整合,所以没触发手动冲突提示。不过你还是能轻松找出本地修改和远程master的差异,试试下面这些方法:
直接对比合并后版本与远程master
先确保本地的远程分支缓存是最新的:git fetch origin然后针对目标文件,对比当前本地版本和远程master的差异:
git diff origin/master HEAD -- dir1/dir2/dir3/my_script.py这个命令会清晰列出两个版本之间的所有代码变更,不管是你本地的修改,还是远程master新增的内容。
对比变基前后的本地代码
用git reflog查看你的操作历史,找到执行git pull --rebase之前的HEAD记录(比如类似a1b2c3 HEAD@{1}: pull --rebase: checkout origin/master的条目,对应的哈希就是你变基前的本地版本)。然后对比这个旧版本和当前版本的差异:git diff a1b2c3 HEAD -- dir1/dir2/dir3/my_script.py这样就能精准看到这次rebase给你的文件带来了哪些远程的变更。
查看文件的详细变更历史
用以下命令查看目标文件的所有提交及对应代码修改:git log -p -- dir1/dir2/dir3/my_script.py你可以在输出里找到远程master最近的提交,以及你自己的本地提交,逐一对比两者的修改内容。
另外,git blame能帮你快速定位每一行代码的最后修改来源:git blame dir1/dir2/dir3/my_script.py从输出里你能看到哪些行是远程分支修改的,哪些是你本地改的。
确认rebase是否完成
偶尔自动合并后可能还处于rebase过程中,执行git status看看输出。如果显示rebase in progress,你可以用git diff --staged查看已经暂存的合并变更,或者执行git rebase --continue完成整个流程。
为什么没看到冲突标记?
Git的自动合并只会在两边修改了同一行或相邻行代码,无法自动判断保留哪一方时,才会生成<<<<<<<这类冲突标记。如果你的修改和远程变更没有重叠(比如你改了函数A,远程改了函数B;或者你在文件末尾加内容,远程在中间插入代码),Git会自动整合这些变更,不需要手动介入,自然就不会出现冲突标记。
内容的提问来源于stack exchange,提问作者Roman

