gpt4 book ai didi

git log --带前缀的分支

转载 作者:太空狗 更新时间:2023-10-29 13:32:15 24 4
gpt4 key购买 nike

我想记录一组特定分支上的所有更改以查看它们之间的关系,我发现:

git log --graph --oneline --topo-order --decorate --simplify-by-decoration `git branch --list -a origin/foo/*`

完全符合我的要求(即记录所有以 foo/* 为前缀的分支上的更改)。

不过现在对git log的--branches选项很好奇。看起来应该以类似的方式工作,但如果我使用 --branches=origin/foo/*--branches=remotes/origin/foo* 或甚至 --branches=foo 的输出也大不相同(只显示极少数不相关的提交)。

文档说:

--branches[=<pattern>]
Pretend as if all the refs in refs/heads are listed on the command line as
<commit>. If <pattern> is given, limit branches to ones matching given shell
glob. If pattern lacks ?, *, or [, /* at the end is implied.

有什么区别?我的问题已经解决,因为我可以使用第一个版本 - 但我问这个是因为我很好奇。 (如果可以避免使用反引号,添加 git 别名也会稍微简单一些。)

This question讨论相关主题 - 但我看不到有关我的特定问题的任何信息。

最佳答案

解释

现在这是“您需要了解 git 的内部结构才能理解文档”的完美案例。我们需要的更少。

--branches 的文档指出它适用于“refs in refs/heads”。远程跟踪引用不在 refs/heads 中,它们在 refs/remotes 中。因此,当查找“origin/foo/*”时,将找不到任何分支。因此 git log 将恢复其默认行为,即开始发现来自 HEAD 的提交。

解决方案

您需要使用 --remotes 选项,它类似于 --branches 但适用于 refs/remotes 中的 refs。这样就变成了:

git log --graph --oneline --topo-order --decorate --simplify-by-decoration --remotes='origin/foo/*'

或者,您可以使用 --glob,它适用于所有分支,但是您需要在前面添加 heads/remotes/ , 或使用通配符。例如:

git log --graph --oneline --topo-order --decorate --simplify-by-decoration --glob='refs/*/foo/*'

关于你的第一个命令

附带说明一下,您的第一个命令并非在所有情况下都有效,因为您在反引号内使用了 git branch,这是一个陶瓷命令。它可能会在未来崩溃,因为 porcelain 命令的输出可能会发生变化。事实上,它确实在某些情况下已经中断,例如当您列出 HEAD 时。例如:

git log --graph --oneline --topo-order --decorate --simplify-by-decoration $(git branch --list -a 'origin/*')

这个命令给了我一个错误,说它无法将 -> 识别为参数。那是因为 git branch 的输出:

remotes/origin/HEAD -> origin/master
remotes/origin/master

为了使您的命令在所有情况下都有效并面向 future ,您可以使用 git for-each-ref(这是一个管道命令),如下所示:

git log --graph --oneline --topo-order --decorate --simplify-by-decoration $(git for-each-ref --format='%(refname)' 'refs/remotes/origin/*')

关于git log --带前缀的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37299022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com