找出哪个分支具有特定文件的最新版本

时间:2018-08-11 02:14:39

标签: git

说我在存储库中有一个文件,我想找出哪个分支具有该文件的最新版本,比如说文件路径是'foo'。

让我们假设仓库的状态/索引/工作树是干净的。

我该如何遍历本地和远程的所有分支,并找出哪个分支在哪个分支上拥有对'foo'的最新更改?

1 个答案:

答案 0 :(得分:3)

如果您的git最新版本足以支持所有这些功能:

  • 获取使用文件触摸文件的最后一次(可访问的)提交的提交ID

    git log --all --format=format:%H -n 1 -- path/to/file
    

    此处--all表示搜索所有引用(分支,标签等)的历史记录,--format=format:%H表示仅显示提交ID,-n 1表示仅显示第一次提交找到了。默认情况下,git log的订单是从最新到最旧的提交,因此第一个将是最新的。

  • 然后使用

    找到包含该提交的所有分支。
    git branch --all --contains commitID
    

    如果只想查看本地分支机构,则可以省略--all

要将这些内容组合到一个列出分支名称的命令中,假设存在修改指定文件的提交:

git branch --all --contains "$(git log --all --format=format:%H -n 1 -- path/to/file)"

此过程不需要清理索引和工作树,尽管它只会检测对已提交文件的更改。