如何对比本地未提交改动与远程分支的文件差异
未提交状态下对比本地与远程Git分支差异的实现方法
对比前先执行git fetch origin,把远程分支的最新状态同步到本地,避免因为本地缓存的远程分支版本过旧导致对比结果不准。
方案1:临时标记法(推荐,无提交残留)
这个方法不会真的提交或暂存你的构建文件,只是临时让Git识别到这些新建文件需要参与对比,操作完可以一键恢复:
- 执行标记命令,指定需要纳入对比的未跟踪文件:
- 只需要对比dist目录下的新建产物:执行
git add -N dist/ - 需要对比本地所有新建、修改的文件:执行
git add -N .
说明:
-N是--intent-to-add的缩写,作用只是在Git的索引里给对应文件加个「计划纳入跟踪」的标记,不会暂存文件内容,也不会生成任何提交记录。 - 只需要对比dist目录下的新建产物:执行
- 执行常规对比命令就能看到完整差异,包括dist目录下的新建文件:
如果只需要列出来哪些文件有变动、不需要看具体代码差异,执行:git diff origin/developgit diff --name-only origin/develop - 对比完成后,执行
git reset就能撤销所有临时标记,回到操作前的状态,本地的文件不会有任何修改或丢失。
方案2:Stash临时存储法
如果不想改动暂存区状态,可以用stash把所有本地改动临时存起来再对比:
- 把工作区所有改动(包括未跟踪的新建文件)临时存入stash栈:
git stash push -u -m "temp for diff" - 对比临时存储的内容和远程develop分支的差异:
git diff origin/develop stash@{0} - 对比完成后执行
git stash pop,就能把之前临时存储的所有改动恢复到工作区,不会丢失任何本地内容。
原命令不生效的原因
你之前执行git diff origin/develop看不到dist目录的文件,是因为Git的diff命令默认只会对比已经被纳入版本跟踪的文件,你本地新建的dist目录属于未跟踪文件,默认不会被计入对比范围,必须通过上述方式让Git把这些文件纳入对比逻辑。
内容的提问来源于stack exchange,提问作者Telion
相关产品推荐
相关产品推荐

