自当前分支分支以来,获取分支上的提交日志的最佳方法是什么?到目前为止我的解决方案是:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top