如何只查看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,即
      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”?)

    没有“查找历史重新连接的任何点”的简写,所以你必须使用类似于和建议的东西:在这样的点或之前明确停止日志记录

    然而,有一种方法可以实现自动化。它可以封装在“一行”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