如何查看多目录Git仓库两次提交间的文件与目录变更
多目录Git仓库的目录变更查看正确姿势
需求明确:执行git pull后,对比当前最新提交和上一次提交,找出哪些子目录(比如inventory-dir、order-dir这类)有文件修改。先分析你用的两个命令,再给你更合适的方案:
你的现有命令问题
git diff inventory-dir:这个命令是对比当前工作区和暂存区里该目录的差异,不是和上一次提交比。如果pull后你没改动本地文件,这个命令根本出不来内容,不符合你的需求。git log --name-status -2 inventory-dir:它会显示最近2次涉及该目录的提交记录,但这是历史提交的汇总,不是直接对比“pull后的最新提交”和“上一次提交”的差异——如果pull拉了好几个提交,这命令显示的是最近两次,不是你要的前后版本对比。
正确的命令推荐
一次性看所有有变更的目录
要快速知道哪些子目录在上一次提交到当前HEAD之间有修改,直接跑:
git diff HEAD~1 --name-only | cut -d'/' -f1 | uniq
拆解下逻辑:
git diff HEAD~1 --name-only:列出两次提交之间所有修改的文件路径cut -d'/' -f1:从路径里提取第一个目录名(也就是你关心的子目录)uniq:去重,得到最终的变更目录列表
查看单个目录的详细变更
如果只盯某个目录,比如inventory-dir,要看具体改了啥,用:
git diff HEAD~1 -- inventory-dir
要是只想看文件状态(新增/修改/删除)和路径,不用看具体内容,加--name-status:
git diff HEAD~1 --name-status -- inventory-dir
处理pull拉取多个提交的情况
如果git pull一次性拉了好几个提交,想对比拉取前的最后一个版本和拉取后的最新版本,可以先打个临时标签标记拉取前的状态:
git tag pre-pull HEAD git pull git diff pre-pull HEAD --name-only | cut -d'/' -f1 | uniq
完事之后删掉临时标签就行:git tag -d pre-pull
内容的提问来源于stack exchange,提问作者James Taylor
相关产品推荐
相关产品推荐

