如何只查看git分支的分支点?
我注意到,当我在一个分支上时(我们称之为如何只查看git分支的分支点?,git,Git,我注意到,当我在一个分支上时(我们称之为feat-123),只有几次提交,git log显示了我分支的整个分支历史(develope)。是否有某种方法可以将日志显示到创建feat-123的起点?如果您知道feat-123是从develope分支出来的,您可以使用双点。语法将git log输出限制为feat-123中不在develope中的提交: git log --oneline --graph develop..feat-123 要了解有关双点和其他有用的提交过滤语法的更多信息,请参阅 从
feat-123
),只有几次提交,git log
显示了我分支的整个分支历史(develope
)。是否有某种方法可以将日志显示到创建feat-123
的起点?如果您知道feat-123
是从develope
分支出来的,您可以使用双点。
语法将git log
输出限制为feat-123
中不在develope
中的提交:
git log --oneline --graph develop..feat-123
要了解有关双点和其他有用的提交过滤语法的更多信息,请参阅
如果您知道
feat-123
是从develop
分支出来的,那么可以使用双点。
语法将git log
输出限制为feat-123
中不在develop
中的提交:
git log --oneline --graph develop..feat-123
要了解有关双点和其他有用的提交过滤语法的更多信息,请参阅
要查看提交在一个分支上而不是在另一个分支上的列表,请使用git日志:
git log oldbranch ^newbranch --no-merges
显示oldbranch上不在newbranch上的所有提交的提交日志
此外,您还可以列出要包括和排除的多个分支,例如
git log oldbranch1 oldbranch2 ^newbranch1 ^newbranch2 --no-merges
要查看提交在一个分支上而不是在另一个分支上的列表,请使用git日志:
git log oldbranch ^newbranch --no-merges
显示oldbranch上不在newbranch上的所有提交的提交日志
此外,您还可以列出要包括和排除的多个分支,例如
git log oldbranch1 oldbranch2 ^newbranch1 ^newbranch2 --no-merges
没有“查找历史重新连接的任何点”的简写法,因此您必须使用类似于和建议的内容:在该点或之前显式停止日志记录
然而,有一种方法可以实现自动化。它可以封装在“一行”shell脚本中:
git log HEAD --not $(
git for-each-ref --format='%(refname:short)' refs/heads/ |
grep -v "^$(git symbolic-ref -q --short HEAD)$"
) "$@"
工作原理:
- 最里面的位,
,打印当前的分支名称,如果您不在分支上,则不打印任何内容(“分离头”状态)git symbolic ref-q——short HEAD
- 我们通过添加
(在行首锚定)和^
(在行尾锚定)将其转换为grep模式$
- 对于每个ref输出,我们使用它从
git中删除当前分支(如果有)
- 每个ref的
输出是每个分支的简短refname,即
中的每个ref。因此,如果您的完整分支名称集是,例如,refs/heads/
、monty
、python
、和flying
,并且您在分支circus
,那么这将列出flying
、monty
、和python
circus
- 最后,在要求
从git log
开头开始之后,我们将所有这些都交给
--而不是
。
命令使用log
从您请求它的任何地方开始,并一直向后走,直到有什么东西(在本例中,git rev list
list)停止。当然,我们添加了--not
,以便包含任何其他命令行参数“$@”
别名嵌入~/.gitconfig
:
[alias]
ltf = !git log HEAD --not $(git for-each-ref \
--format='%(refname:short)' refs/heads | \
grep -v "^$(git symbolic-ref -q --short HEAD)$")
现在,gitltf
,gitltf--oneline
,等等,所有这些都起到了作用。(我不知道我是否喜欢这个名字,ltf
,它代表“log to fork”,但这更像是一个“log to join”。也许lbr
代表“log branch”?)没有“查找历史重新连接的任何点”的简写,所以你必须使用类似于和建议的东西:在这样的点或之前明确停止日志记录
然而,有一种方法可以实现自动化。它可以封装在“一行”shell脚本中:
git log HEAD --not $(
git for-each-ref --format='%(refname:short)' refs/heads/ |
grep -v "^$(git symbolic-ref -q --short HEAD)$"
) "$@"
工作原理:
- 最里面的位,
git symbolic ref-q——short HEAD
,打印当前的分支名称,如果您不在分支上,则不打印任何内容(“分离头”状态)
- 我们通过添加
^
(在行首锚定)和$
(在行尾锚定)将其转换为grep模式
- 对于每个ref
输出,我们使用它从git中删除当前分支(如果有)
每个ref的输出是每个分支的简短refname,即refs/heads/
中的每个ref。因此,如果您的完整分支名称集是,例如,monty
、python
、flying
、和circus
,并且您在分支flying
,那么这将列出monty
、python
、和circus
最后,在要求git log
从开头开始之后,我们将所有这些都交给--而不是。log
命令使用git rev list
从您请求它的任何地方开始,并一直向后走,直到有什么东西(在本例中,--not
list)停止。当然,我们添加了“$@”
,以便包含任何其他命令行参数
由于它是一个单行程序,因此可以将其作为别名嵌入~/.gitconfig
:
[alias]
ltf = !git log HEAD --not $(git for-each-ref \
--format='%(refname:short)' refs/heads | \
grep -v "^$(git symbolic-ref -q --short HEAD)$")
现在,gitltf
,gitltf--oneline
,等等,所有这些都起到了作用。(我不知道我是否喜欢名称ltf
,它代表“log to fork”,但这更像是一个“log to join”。可能lbr
代表“log branch”?)别名可能需要一个终止的--
(在最后一个右括号后)来确保ref与可能的文件名区分开来。为了避免致命错误:模棱两可的参数“Documentation”:修订版和文件名都使用“---”将路径与修订版分开,例如:“git[…]--[…]”。另外,最后的“$@”
尚未复制到别名中(但可能再次与--
位置冲突)。别名的副作用是充当“$@”
已经存在的别名。我不想要一个c