如何只查看git分支回到它分支的点?

时间:2013-09-06 21:54:59

标签: git

我注意到当我在一个分支上(我们称之为feat-123)时,只有一两个提交,git log显示我分支的分支的整个历史({{1 }})。有没有办法只在远离develop创建点的时候显示日志?

3 个答案:

答案 0 :(得分:2)

如果您知道feat-123已从develop分支,则可以使用双点..语法将git log输出限制为仅feat-123中的那些提交那些不在develop中的

git log --oneline --graph develop..feat-123

要了解有关双点和其他有用的提交过滤语法的更多信息,请参阅

    来自Revision Selection - Commit Ranges。的
  1. **FREE online Pro Git book 来自Git Revisions - Specifying Ranges
  2. official Linux Kernel Git documentation

答案 1 :(得分:2)

要查看哪个提交在一个分支上但不在另一个分支上的列表,请使用git log:

   git log oldbranch ^newbranch --no-merges

显示oldbranch上不在newbranch上的所有提交的提交日志。

此外,您可以列出多个分支以包含和排除,例如

   git log oldbranch1 oldbranch2 ^newbranch1 ^newbranch2 --no-merges

答案 2 :(得分:2)

“查找历史记录重新加入的任何点”没有简写,因此您必须使用CupcakeD4NI3LS建议的内容:明确停止记录 - 或者 - 在此之前。

然而,有一种方法可以实现自动化。它可以封装在“一行”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/中的每个引用。因此,如果您的完整分支名称集合为montypythonflyingcircus,并且您位于分支flying上,这会列出montypythoncircus
  • 最后,在--not开始git log之后,我们将所有这些提供给HEADlog命令使用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 ltfgit ltf --oneline等都可以解决问题。 (我不知道我是否喜欢名称ltf,它代表“log to fork”,但这更像是“登录加入”。也许lbr表示“日志分支”?)