如何运行 git log 以仅查看特定分支的更改?

问题描述 投票:0回答:10

我有一个本地分支跟踪远程/主分支。运行

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

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

备注:

配置信息:

[branch "my-branch"]
  remote = origin
  merge = refs/heads/master
git branch git-branch git-log
10个回答
740
投票

使用
git log

假设您的分支是在

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

git log master..

如果你不在分支中,那么你可以将分支名称添加到“git log”命令中,如下所示:

git log master..branchname

如果您的树枝是由

origin/master
制成的,则说
origin/master
而不是
master

使用“cherry”的愚蠢替代方案

您也可以使用“cherry”命令执行此操作,尽管输出没有那么有用。在分支中时,执行此操作可以找出分支中哪些提交不在 master 中:

git cherry -v master

196
投票

用途:

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

仅适用于目标分支(当然--graph、--abbrev-commit --decorate更精致)。

关键选项是

--first-parent
:“在看到合并提交时仅遵循第一个父提交”(https://git-scm.com/docs/git-log)

它可以防止显示提交分叉。


部分不必是分支名称。它可以是提交引用、标签、任何引用(例如

HEAD
HEAD~1
..)


40
投票

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

git log branch_name --author='Dyaniyal'

14
投票

我遇到的问题(我认为与此类似)是 master 距离我的分支点太远,历史记录没有用处。 (导航到分支点会花费太长时间。)

经过一番尝试和错误,这大致给了我我想要的:

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

13
投票

就跑吧

git log origin/$BRANCH_NAME


2
投票

对于使用 Magit 的用户,请点击

l
=m
来切换
--no-merges
=p
来切换
--first-parent

然后再次点击

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


1
投票

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.

0
投票

这是一个黄鼠狼新时代 GUI 侧面的答案,但无论如何,在 Xcode 中显然有一个可视化工具。


0
投票

我修改了建议的答案以包括 lg1 外观。

[alias]
lg1b = "!cd -- \"${GIT_PREFIX:-.}\" && CURRENT_BRANCH=$(git branch --show-current) && git log $CURRENT_BRANCH --graph --abbrev-commit --pretty='format:%C(bold blue)%h%C(reset) %C(bold green)(%ar)%C(reset) %s %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --decorate --not $(git for-each-ref --format='%(refname)' refs/heads/ | grep -v refs/heads/$CURRENT_BRANCH) #"

请参阅 lg1 命令:漂亮的 Git 分支图


-3
投票
git log $(git branch --show-current)
© www.soinside.com 2019 - 2024. All rights reserved.