如何在Git的某个分支上获得更改

自从分支机构分支出来以后,在分支机构上提交提交日志的最好方法是什么? 我迄今为止的解决scheme是:

git log $(git merge-base HEAD branch)..branch 

git-diff的文档表明, git diff A...B相当于git diff $(git-merge-base AB) B 。 另一方面, git-rev-parse的文档表明r1...r2被定义为r1 r2 --not $(git merge-base --all r1 r2)

为什么这些不同? 请注意, git diff HEAD...branch给了我想要的差异,但相应的git log命令给了我比我想要的更多。

在图片中,假设:

          X ---Ÿ---ž---分公司
         /
 --- ---一个B ---电Ç--- --- dÈ--- HEAD

我想获得一个包含提交x,y,z的日志。

  • git diff HEAD...branch给这些提交
  • 然而, git log HEAD...branch给出了x,y,z,c,d,e。

在修订列表的上下文中, A...Bgit-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 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”被创build为“master”的跟踪分支。

同样,要查看您可以使用的传入更改:

 git log branchName..master 

这与我发布的答案类似: 预览Git推送

把这些函数放到你的Bashconfiguration文件中:

  • gbout – git分支传出
  • gbin – git分支传入

你可以使用这个:

  • 如果在主:gbin branch1 < – 这将告诉你什么是在分支1,而不是在主
  • 如果在主人: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... 

其中结合了几个function:

  • 这是超短的
  • 显示实际的变化

更新:

这应该是git diff master ,但是这也显示了diff,而不是提交的问题。

抛出一个-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 

要查看自主分支之后的当前分支的日志,请执行以下操作:

git log master...

如果您当前在master上,则可以查看不同分支的日志,因为它已经分出了master:

git log ...other-branch

 git log --cherry-mark --oneline from_branch...to_branch 

(3dots),但有时会显示“+”而不是“=”

我发现

 git diff <branch_with_changes> <branch_to_compare_to> 

更有用,因为你不仅得到了提交的消息,而且还有全部的差异。 如果你已经在分支上,你想看到和(例如)的变化想看看什么改变了主,你可以使用:

 git diff HEAD master