【问题标题】:How do I run git log to see changes only for a specific branch?如何运行 git log 以仅查看特定分支的更改?
【发布时间】:2011-06-06 16:02:03
【问题描述】:

我有一个本地分支跟踪远程/主分支。运行git-pullgit-log 后,日志将显示远程跟踪分支以及当前分支中的所有提交。但是,由于对远程分支进行了如此多的更改,我只需要查看对当前本地分支所做的提交。

什么是用于仅显示特定分支的提交的 Git 命令?

注意事项:

配置信息:

[branch "my-branch"]
  remote = origin
  merge = refs/heads/master

【问题讨论】:

    标签: git branch git-branch git-log


    【解决方案1】:

    假设您的分支是从master 创建的,那么在分支中(也就是说,您已签出分支):

    git cherry -v master
    

    git log master..
    

    如果你不在分支中,那么你可以在“git log”命令中添加分支名称,像这样:

    git log master..branchname
    

    如果您的分支是由origin/master 组成的,那么请说origin/master 而不是master

    【讨论】:

    • 完美! git log --no-merges master.. 正是我所需要的。
    • @HighwayofLife: --no-merges 可能看起来只显示来自特定分支的提交,但实际上只显示未导致合并的提交
    • 有没有一种不需要我输入/知道父分支的方法呢? :)
    • 为了了解变化率,我使用了以下咒语 :) 生成单行日志格式,首先显示作者姓名,然后是提交的相对年龄: git log --no-merges --pretty='%C(yellow)%h%d %Creset%an %Cgreen%ar:%Creset %s' --graph master..
    • 不应该读吗? git log master.. --oneline --no-merges
    【解决方案2】:

    用途:

    git log --graph --abbrev-commit --decorate  --first-parent <branch_name>
    

    只针对目标分支(当然--graph、--abbrev-commit--decorate 更精细)。

    关键选项是--first-parent:“在看到合并提交时仅关注第一个父提交”(https://git-scm.com/docs/git-log)

    它会阻止显示提交分叉。

    【讨论】:

    • --first-parent &lt;branch_name&gt; 是选项。有效!
    • branch-name 是什么,我只想查看其历史记录的分支?在一个只有 3 个更改的分支上,这显示了数百个。
    • --first-parent &lt;branch_name&gt; 也为我工作!我最终得到了git log --first-parent $current_branch_name --no-merges 的别名。作为对@EdRandall 的回应,它将显示分支上的提交 + 分支上的提交。例如:
    • 糟糕,我很快就提交了,示例如下:您在 master 上提交了 A 和 B。您从 master 分支 new_feature。您将提交 C 和 D 添加到它。然后将 E 和 F 添加到 master 中。然后将 master 合并到 new_feature。在new_feature 上使用git log,你会看到“合并主控”,F、E、D、C、A、B。使用git log --first-parent new_feature --no-merges,你会看到D、C、A、B。
    • 我想知道是否所有选项都与所提出的问题相关!
    【解决方案3】:

    如果您只想要那些由您在特定分支中完成的提交,请使用以下命令。

    git log branch_name --author='Dyaniyal'
    

    【讨论】:

      【解决方案4】:

      我遇到的问题,我认为与此类似,是 master 离我的分支点太远了,以至于历史记录没有用。 (导航到分支点需要很长时间。)

      经过反复试验,这大致给了我想要的:

      git log --graph --decorate --oneline --all ^master^!
      

      【讨论】:

      • 你能解释一下它是如何工作的吗?前导“^”尾随“^”和“!”是什么?什么意思?
      【解决方案5】:

      只需运行git log origin/$BRANCH_NAME

      【讨论】:

      • 我不确定上面所有的复杂查询是什么。这是最简单、最合乎逻辑的解决方案。
      • 但这并没有显示完整的提交历史记录——它显示了所有以 origin/$BRANCH_NAME 结尾的提交。我不认为这就是问题作者的意思。
      【解决方案6】:

      develop 分支上,想查看最近的 PR 列表。

      PROMPT> git log --first-parent --pretty=oneline 0a805f46957a957161c5ed4e08081edeed9b91e7..6aae236484dc1881f5dbdef0f529eb95c6ef7bd5
      0a805f46957a957161c5ed4e08081edeed9b91e7 Merged PR 1984/3: Fixed crash 2.
      8d51abb53403e10e6484dc3c0569a5792f1x3734 Merged PR 1984/2: Fixed crash 1.
      6aae236484dc1881f5dbdef0f529eb95c6efcbd5 Merged PR 1984/1: Downgraded from windows 11 to windows 3.11.
      

      【讨论】:

        【解决方案7】:

        对于使用Magit 的用户,请点击l=m 切换--no-merges=p 切换--first-parent

        然后再次点击l 以显示从当前分支(没有合并到它的提交)到历史记录的提交,或者,如果您希望日志在它从@987654331 分支的位置结束@,点击 o 并输入 master.. 作为您的范围:

        【讨论】:

        • 最新的 magit(20210 年 2 月)中似乎没有这些开关
        • 我正在从 melpa 运行 magit-20210215.908,它们仍然存在,并且截至今天它们出现在 master 的源代码中:github.com/magit/magit/blob/…
        • 事实上它们在我正在运行的版本中。然而,事实证明,doomemacs 将瞬态默认级别设置为 5,隐藏了许多开关。 (setq transient-default-level 7) 恢复所有开关。
        【解决方案8】:
        git log $(git branch --show-current)
        

        【讨论】:

        • 这完全等同于git log,并且不会过滤掉当前分支和父分支之间的共同提交。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 2014-06-08
        相关资源
        最近更新 更多