如何在git中看到分支之间的提交差异?

时间:2012-12-20 04:36:26

标签: git logging branch git-log

我在分支-X上,并在其上添加了几个提交。我想看看MASTER和我提交的分支之间的所有区别。我可以做一个

git checkout master
git log

然后是

git checkout branch-X
git log

并在视觉上区分这些,但我希望有一种更简单,更不容易出错的方法。

9 个答案:

答案 0 :(得分:605)

您可以使用

轻松完成此操作
git log master..branch-X

这将显示你承诺分支-X但主人没有。

答案 1 :(得分:269)

你可以通过这个

得到一个非常好的视觉输出,看你的分支是如何不同的
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

答案 2 :(得分:54)

我认为这是选择和背景的问题。我更喜欢使用

git log origin/master..origin/develop --oneline

它将显示不在master分支中的develop中的提交。

如果您想查看实际修改的文件,请使用

git diff --stat origin/master..origin/develop

如果你没有指定参数,它将显示完整的差异。 如果你想看到visual diff,请在linux上安装meld,或在Windows上安装WinMerge。确保它们是默认的difftools。然后使用类似

的内容
git difftool -y origin/master..origin/develop

如果您想将其与当前分支进行比较。使用HEAD代替分支名称比使用更方便:

git fetch
git log origin/master..HEAD --oneline

它会显示所有即将合并的提交

答案 3 :(得分:14)

如果您使用的是Linux,gitg可以快速,图形化地完成。

如果您坚持使用命令行,则可以使用:

git log --oneline --decorate

默认情况下,要使git log更好,我通常会设置这些全局首选项:

git config --global log.decorate true
git config --global log.abbrevCommit true

答案 4 :(得分:12)

我建议以下内容查看“提交内容”的区别。对于对称差异,请使用反向参数重复命令:

git cherry -v master [your branch, or HEAD as default]

答案 5 :(得分:4)

不是完美的答案,但对于使用Github的人来说效果更好

enter image description here

转到您的仓库:Insights -> Network

答案 6 :(得分:0)

#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

由于它允许a和b日志在视觉上并排显示,如果你有一个可视化差异工具,那么就可以做到这一点。使用命令在结尾处替换diff命令以启动可视化差异工具。

答案 7 :(得分:0)

我使用了一些答案,并找到了适合我的情况的答案(确保所有任务都在release分支中)。

其他方法也可以使用,但是我发现它们可能会添加不需要的行,例如不增加值的合并提交。

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

或者您可以将当前数据与主数据进行比较

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch可以确保您使用的是更新的信息。

通过这种方式,每个提交都将排成一行,您可以将其复制/粘贴到文本编辑器中,然后开始将任务与将要合并的提交进行比较。

答案 8 :(得分:0)

如果要基于提交消息进行比较,可以执行以下操作:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)