题
自当前分支分支以来,获取分支上的提交日志的最佳方法是什么?到目前为止我的解决方案是:
git log $(git merge-base HEAD branch)..branch
的文档 git 差异 表明 git diff A...B
相当于 git diff $(git-merge-base A B) B
. 。另一方面,文档 git-rev-解析 表明 r1...r2
定义为 r1 r2 --not $(git merge-base --all r1 r2)
.
为什么这些不同?注意 git diff HEAD...branch
给了我我想要的差异,但是相应的 git log 命令给了我比我想要的更多的东西。
在图片中,假设:
x---y---z---branch / ---a---b---c---d---e---HEAD
我想获取包含提交 x、y、z 的日志。
git diff HEAD...branch
给出这些提交- 然而,
git log HEAD...branch
给出 x, y, z, c, d, e。
解决方案
在修订列表的上下文中, A...B
是如何 git-rev-parse
定义它。git-log 获取修订列表。 git-diff
不需要修订列表 - 它需要一两个修订,并且已经定义了 A...B
语法来表示它是如何定义的 git-diff
联机帮助页。如果 git-diff
没有明确定义 A...B
, ,那么该语法将无效。请注意, git-rev-parse
联机帮助页描述了 A...B
在“指定范围”部分中,该部分中的所有内容仅在修订范围有效的情况下才有效(即,当需要修订列表时)。
要获取仅包含 x、y 和 z 的日志,请尝试 git log HEAD..branch
(两个点,而不是三个)。这与 git log branch --not HEAD
, ,表示分支上所有不在 HEAD 上的提交。
其他提示
git cherry branch [newbranch]
当你在时,正是按照你的要求做的 master
分支。
我也非常喜欢:
git diff --name-status branch [newbranch]
这并不完全是您所要求的,但在相同的上下文中仍然非常有用。
您想要看到的是传出提交的列表。您可以使用以下方法执行此操作
git log master..branchName
或者
git log master..branchName --oneline
我假设“branchName”是作为“master”的跟踪分支创建的。
同样,要查看传入的更改,您可以使用:
git log branchName..master
这与我发布的答案类似: 预览 Git 推送
将这些函数放入您的 Bash 配置文件中:
- gbout - git 分支传出
- gbin - git 分支传入
你可以这样使用:
- 如果在主控上:gbin branch1 < - 这将向您展示分支1中的内容,而不是Master中的内容
- 如果在主控上:gbout branch1 < - 这将向您展示主人中没有分支1的内容
这适用于任何分支机构。
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
function gbin {
echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
function gbout {
echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
类似于 Alex V 和 NDavis 等几个答案,但它们都不完全相同。
当已经在相关分支时
使用:
git diff master...
它结合了几个特点:
- 它超短
- 显示实际变化
更新:
这大概应该是 git diff master
, ,但这也显示了差异,而不是问题指定的提交。
在那里扔一个 -p 来查看一些文件更改
git log -p master..branch
创建一些别名:
alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"
alias gbl='git log -p master..\`gbc\`'
查看分支的独特提交:
gbl
要查看从 master 分支以来当前分支的日志:
git log master...
如果您当前在 master 上,要查看从 master 分支出来后的不同分支的日志:
git log ...other-branch
git log --cherry-mark --oneline from_branch...to_branch
(3点)但有时它显示“+”而不是“=”
我发现
git diff <branch_with_changes> <branch_to_compare_to>
更有用,因为您不仅可以获得提交消息,还可以获得整个差异。如果您已经在分支上想要查看更改并且(例如)想要查看主分支上的更改,您可以使用:
git diff HEAD master