自从当前分支分支以来,在分支上获取提交日志的最佳方法是什么?到目前为止我的解决方案是:
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。答案 0 :(得分:176)
在修订列表的上下文中,A...B
是git-rev-parse
定义它的方式。 git-log采用修订列表。 git-diff
未获取修订列表 - 需要一次或两次修订,并且已将A...B
语法定义为在git-diff
联机帮助页中定义它的方式。如果git-diff
未明确定义A...B
,则该语法无效。请注意,git-rev-parse
联机帮助页在“指定范围”部分中描述了A...B
,该部分中的所有内容仅在修订范围有效的情况下有效(即需要修订列表时)。 / p>
要获取仅包含x,y和z的日志,请尝试git log HEAD..branch
(两个点,而不是三个点)。这与git log branch --not HEAD
相同,表示分支上不在HEAD上的所有提交。
答案 1 :(得分:64)
git cherry branch [newbranch]
当你在master
分支时,正是你所要求的。
我也非常喜欢:
git diff --name-status branch [newbranch]
这不完全是你所要求的,但在相同的背景下仍然非常有用。
答案 2 :(得分:33)
您希望看到的是传出提交的列表。您可以使用
执行此操作git log master..branchName
或
git log master..branchName --oneline
我假设“branchName”被创建为“master”的跟踪分支。
同样,要查看传入的更改,您可以使用:
git log branchName..master
答案 3 :(得分:23)
这与我发布的答案类似:Preview a Git push
将这些功能放入Bash配置文件中:
你可以使用它:
这适用于任何分支。
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
}
答案 4 :(得分:13)
类似于Alex V&NDavis和NDavis等几个答案,但它们都没有完全相同。
当已经在相关分支中
使用:
git diff master...
其中包含多项功能:
更新
这应该是git diff master
,但这也显示了差异,而不是指定问题的提交。
答案 5 :(得分:8)
在那里扔一个-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
答案 6 :(得分:6)
要查看当前分支的日志,因为从master分支:
git log master...
如果您当前在master上,要查看不同分支的日志,因为它分支了master:
git log ...other-branch
答案 7 :(得分:4)
git log --cherry-mark --oneline from_branch...to_branch
(3dots)但有时它显示'+'而不是'='
答案 8 :(得分:2)
我找到了
git diff <branch_with_changes> <branch_to_compare_to>
更有用,因为你不仅获得提交消息而且获得整个差异。如果您已经在分支机构上,您希望看到更改和(例如)想要查看更改为主服务器的更改,您可以使用:
git diff HEAD master
答案 9 :(得分:0)
在Git 2.30(Q1 2021)上,“ git diff A ... B(man)”学习了“ git diff --merge-base AB(man)”,这是说同一话的更长手。
因此,您可以使用git diff --merge-base <branch> HEAD
执行此操作。这应该等效于git diff <branch>...HEAD
,但不必在差异中使用范围标记。