自从当前分支分支以来,在分支上获取提交日志的最佳方法是什么?我目前的解决方案是:
git log $(git merge-base HEAD branch)..branch
git-diff的文档表明它git diff A...B
等同于git diff $(git-merge-base A B) B
.另一方面,git-rev-parse的文档表明它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.
Lily Ballard.. 180
在修订列表的上下文中,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上不在的分支上的所有提交相同.
在修订列表的上下文中,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 branch传出
gbin - git branch传入
你可以这样使用:
如果在master:gbin branch1 < - 这将显示branch1中的内容而不是master中的内容
如果在master:gbout branch1 < - 这将显示master中不在分支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