我注意到当我在一个分支上(我们称之为feat-123
)时,只有一两个提交,git log
显示我分支的分支的整个历史({{1 }})。有没有办法只在远离develop
创建点的时候显示日志?
答案 0 :(得分:2)
如果您知道feat-123
已从develop
分支,则可以使用双点..
语法将git log
输出限制为仅feat-123
中的那些提交那些不在develop
中的
git log --oneline --graph develop..feat-123
要了解有关双点和其他有用的提交过滤语法的更多信息,请参阅
答案 1 :(得分:2)
要查看哪个提交在一个分支上但不在另一个分支上的列表,请使用git log:
git log oldbranch ^newbranch --no-merges
显示oldbranch上不在newbranch上的所有提交的提交日志。
此外,您可以列出多个分支以包含和排除,例如
git log oldbranch1 oldbranch2 ^newbranch1 ^newbranch2 --no-merges
答案 2 :(得分:2)
“查找历史记录重新加入的任何点”没有简写,因此您必须使用Cupcake和D4NI3LS建议的内容:明确停止记录 - 或者 - 在此之前。
然而,有一种方法可以实现自动化。它可以封装在“一行”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
打印当前分支名称,如果不在分支上,则打印任何内容(“分离的HEAD”状态)。^
(行首的锚点)和$
(结束时的锚点)将其转换为grep模式。git for-each-ref
输出删除当前分支(如果有)。for-each-ref
输出是每个分支的短引用名称,即refs/heads/
中的每个引用。因此,如果您的完整分支名称集合为monty
,python
,flying
和circus
,并且您位于分支flying
上,这会列出monty
,python
和circus
。--not
开始git log
之后,我们将所有这些提供给HEAD
。 log
命令使用git rev-list
从您提出的任何地方开始,并继续向后,直到某些内容(在这种情况下,--not
列表)停止。当然,我们添加"$@"
以便包含任何其他命令行参数。由于它是一个衬垫,因此它可以嵌入~/.gitconfig
,作为alias
:
[alias]
ltf = !git log HEAD --not $(git for-each-ref \
--format='%(refname:short)' refs/heads | \
grep -v "^$(git symbolic-ref -q --short HEAD)$")
现在git ltf
,git ltf --oneline
等都可以解决问题。 (我不知道我是否喜欢名称ltf
,它代表“log to fork”,但这更像是“登录加入”。也许lbr
表示“日志分支”?)