如何列出在两个分支之间有变化的文件名

39

我在代码库中有两个分支,想要针对某些文件进行差异比较。

我只想列出这两个分支之间新增的迁移文件。

比如说:

git diff branch1 branch2 | grep /db/migrate

我该如何做到呢?


1
“新添加的迁移”是什么意思? - neuhaus
3
可能是 显示两个版本之间有哪些文件发生了变化 的重复问题。 - Tim Biegeleisen
新添加的迁移位于两个分支之间,一个旧分支和一个新分支。 - Deepak Mahakale
2个回答

55

这个命令会对它们的整个历史进行差异分析:

git diff branch1..branch2 --name-only

如果你想从它们最后的共同祖先开始比较,那么:

git diff branch1...branch2 --name-only

现在你可以搜索你想要的文件。从这里开始编写一个小型的Shell脚本来逐个文件比较两个分支的差异。

 filenames=$(git diff branch1...branch2 --name-only | grep /db/migratons)
 IFS=' '
 read -r -a filearr <<< "$filenames"
 for filename in "${filearr[@]}"
 do
      echo $(git diff branch1...branch2 -- "$filename")
 done
创建git-command-name文件,并将其放入user/bin文件夹中(您应该将输入分支参数化为变量)。
Git会将其识别为一个命令,您可以通过以下方式调用它:
git command-name branch1 branch2

1
不错!我正在寻找“--name-only”选项。 - dotnetCarpenter
1
在“--name-only”上也一样。 - bitcruncher
我会将", then:"更改为", then(注意分支名称之间的额外句点): "。 - Julien Lamarche
1
“--name-status” 还显示文件是否已修改、添加、删除、重命名等信息。 - Frank Kusters

3

如果您想将当前分支与另一个分支进行比较,这样做甚至更容易。熟悉git的人可能会觉得这很明显,但我为那些刚开始使用git的人提供了这个提示。

git diff other_branch_name --name-only

“显而易见”的部分是在git命令中:如果只提供1个参数,则假定当前分支为源(第一个参数),指定的分支为目标(第二个)。 - SMBiggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接