说我在存储库中有一个文件,我想找出哪个分支具有该文件的最新版本,比如说文件路径是'foo'。
让我们假设仓库的状态/索引/工作树是干净的。
我该如何遍历本地和远程的所有分支,并找出哪个分支在哪个分支上拥有对'foo'的最新更改?
答案 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)"
此过程不需要清理索引和工作树,尽管它只会检测对已提交文件的更改。