首页 > 解决方案 > 如何比较本地和远程 git 文件?

问题描述

我需要列出仅存在于本地的所有跟踪的提交文件。假设我的本地仓库是远程仓库(在 github 或 gitlab 上)的提交,这些是我本地跟踪的提交文件:

a.txt
b.txt

现在想象在我的远程仓库中只有这些文件之一:

a.txt

根据跟踪的提交文件,可以使用什么 git 命令列出本地和远程存储库之间的差异?明确地说,哪个 git 命令(git-ls-files、gt-ls-remote、git-ls-tree 等)可以生成以下输出:

b.txt

编辑 1:我必须在不从远程仓库中提取提交的情况下执行此操作。

编辑 2:我需要这个来编写一个 git hook 来防止推送,但我不确定这是 git hooks 的一个很好的用例。

标签: gitgit-ls-filesgit-ls-remotegit-ls-tree

解决方案


我想我已经弄清楚了:

git fetch origin && comm -2 -3 \
  <(sort <(git ls-tree -r master --name-only)) \
  <(sort <(git ls-tree -r origin/master --name-only))

最后结果:

b.txt

谢谢torekpolareper。你的建议很有帮助。


推荐阅读