不切换本地分支如何对比远程分支同一commit中的两个文件
命令行实现方案
所有操作均不需要切换当前本地分支,也不需要为目标远程分支创建对应的本地upstream跟踪分支,不会修改当前工作区的任何文件内容。
- 前置确认:完成
git fetch后,远程分支的所有提交、文件对象已经同步到本地Git对象库,可以直接通过引用访问,执行git cat-file -t <目标commit短/完整哈希>返回commit即代表对象可正常读取。 - 场景1:对比指定远程commit下两个文件的完整内容差异
直接执行以下命令即可:
如果你要对比的是远程分支最新提交里的两个文件,不需要提前查commit哈希,直接把commit哈希替换为远程分支引用即可,例如对比git diff <目标commit哈希>:<文件1在仓库内的相对路径> <目标commit哈希>:<文件2在仓库内的相对路径>origin/dev分支最新提交下config/dev.env和config/test.env的差异:git diff origin/dev:config/dev.env origin/dev:config/test.env - 场景2:对比两个文件在该远程commit中各自的提交改动(即对比两个文件在本次提交相对于父提交的变更内容)
可以先导出两个文件的本次提交diff,再做对比,操作如下:# 导出文件1在目标commit的改动到临时文件 git show <目标commit哈希> -- <文件1相对路径> > /tmp/f1_diff.tmp # 导出文件2在目标commit的改动到临时文件 git show <目标commit哈希> -- <文件2相对路径> > /tmp/f2_diff.tmp # 对比两个改动内容 git diff /tmp/f1_diff.tmp /tmp/f2_diff.tmp # 对比完成后可删除临时文件 rm /tmp/f1_diff.tmp /tmp/f2_diff.tmp
注意:命令里的文件路径必须是文件在Git仓库中的相对路径,不能写本地磁盘的绝对路径,否则Git无法识别对应仓库内的文件对象。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

