如何使用Git检查单个文件是否已提交但尚未推送
检查单个文件是否存在已本地提交未推送改动的方法
操作前先执行git fetch同步本地存储的远程分支最新提交元数据,该操作不会改动本地工作区或已有提交,避免因本地存储的远程信息过期导致判断错误。
方法1:查看涉及目标文件的未推送提交
执行命令:git log @{u}..HEAD -- <目标文件路径>
- 命令有输出:说明存在该文件相关的、已经提交到本地但还没推送到远程的提交,输出内容就是对应的提交记录
- 命令无输出:说明该文件不存在已提交未推送的改动,和远程对应分支的版本一致
其中@{u}是当前分支绑定的上游远程分支的简写,@{u}..HEAD表示筛选出「本地当前分支有、但远程上游分支没有」的提交范围,末尾加文件路径则只筛选和目标文件相关的提交。
方法2:直接对比文件版本差异
如果不需要看具体提交记录,只想快速判断是否存在未推送差异,可以执行:git diff @{u} -- <目标文件路径>
- 命令有输出:说明本地HEAD版本的目标文件和远程分支版本存在差异,有未推送的改动
- 命令无输出:说明两端文件版本完全一致,不存在未推送的提交改动
常见误区说明
git status --porcelain <file>仅能检查文件在工作区、暂存区和本地HEAD之间的状态,只能识别未提交的修改/新增/删除操作,文件完成本地提交后该命令不会返回任何结果,无法判断提交是否已推送。git status <file>返回的「当前分支领先远程X个提交」是全仓库维度的统计结果,即使本地有未推送提交,只要这些提交没有涉及你查询的目标文件,该文件实际是和远程同步的,无法靠这个结果判定单个文件的推送状态。
内容的提问来源于stack exchange,提问作者Marc Fauser
相关产品推荐
相关产品推荐

