git diff两个分支,仅显示未修改的文件

时间:2019-07-18 05:27:39

标签: git

在分支NewFeature中,我有一个xml模式更改,我想检查所有单元测试中的所有xml文件是否都已正确修改。

我喜欢在两个分支之间找到所有未修改的文件。像这样

git aresame develop NewFeature -- **/*.xml

3 个答案:

答案 0 :(得分:1)

git ls-tree -r develop | grep '\sblob\s' | grep '.xml$' | awk '{print $3,$4}' > foo.txt
git ls-tree -r NewFeature | grep '\sblob\s' | grep '.xml$' | awk '{print $3,$4}' >> foo.txt
sort foo.txt | uniq -d | awk '{print $2}'

git ls-tree -r打印所有跟踪文件的<mode> SP <type> SP <object> TAB <file>

grep '\sblob\s'不包括treessubmodules,而grep '.xml$'仅包含xml文件。

awk '{print $3,$4}'忽略mode的变化,例如从06440755。如果您担心此类更改,请删除此部分。

sort foo.txt | uniq -d打印两个分支上的路径和哈希值相同的文件,而awk '{print $2}'仅打印路径。

答案 1 :(得分:1)

类似于ElpieKay解决方案: (一行,无模式检查)

comm -3 <(git diff --name-only develop..NewFeature | grep '.xml$') <(git ls-tree -r --name-only develop | grep '.xml$')

答案 2 :(得分:1)

根据您的好评,我将几种想法整合到了最终解决方案中

comm -3 -1 <(git diff --name-only develop NewFeature -- **/*.xml|sort)  <(git ls-tree develop -r | grep -Ei '\sblob\s.+\.xml$' | cut -f 2 | sort)

说明:

  • git diff --name-only develop NewFeature -- **/*.xml|sort按排序顺序列出所有已更改的xml文件
  • git ls-tree develop -r | grep -Ei '\sblob\s.+\.xml$' | cut -f 2 | sort打印原始开发分支中的所有xml文件
  • comm -3 -1 ...逐行比较排序的文件,并抑制仅在NewFeature分支(-1)中的行,以及在两个分支中的文件(-3)