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

Ave*_*ery 301 git logging branch git-log

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

git checkout master
git log
Run Code Online (Sandbox Code Playgroud)

然后一个

git checkout branch-X
git log
Run Code Online (Sandbox Code Playgroud)

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

Pab*_*ook 658

你可以轻松地做到这一点

git log master..branch-X
Run Code Online (Sandbox Code Playgroud)

这将显示你提交的分支-X但主却没有.

  • 如果你已经切换到`branch-X`,你可以使用`git log master..` (31认同)
  • 如果两个分支都包含另一个不提交的提交,是否有选项?现在,您必须翻转参数并以两种方式运行它以查看其他分支不包含的提交. (8认同)
  • @ElliottSlaughter:如果你想在master或branch-X中找到提交,但不是两者都可以,你可以使用`git log master ... branch-X`(三个点而不是两个).有关详细信息,请参阅`man gitrevisions`. (7认同)
  • 如果提交已经从branch-X挑选到master,那么这将不会过滤掉它们.它们仍将在提交列表中"在分支-X但不在主设备上",即使它们实际上都在... (7认同)
  • 它实际上只是答案的一半。master中导致分支偏离的任何提交都不会显示 (2认同)

tom*_*tom 298

你可以得到一个非常好的视觉输出,你的分支与此有何不同

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X
Run Code Online (Sandbox Code Playgroud)

  • `git log --oneline --graph --all --decorate --abbrev-commit`将以更短/更可读的命令为您提供类似的输出 (37认同)
  • 这不会向你显示分支之间的差异,尽管这就是被问到的. (10认同)
  • `git log --oneline --graph --all --decorate`就够了,`--abbrev-commit`不是必需的,`--oneline`是`--pretty = oneline --abbrev-commit`的缩写. (10认同)
  • 非常复杂. (4认同)
  • 我喜欢这样:`git log --all --graph --pretty = format:'%Cred%h%Creset - %C(黄色)%d%Creset%s%Cgreen(%cr)%Creset'` (3认同)
  • 这样做:`alias diff-branches ="git log --graph --pretty = format:'%Cred%h%Creset - %C(黄色)%d%Creset%s%Cgreen(%cr)%Creset' - -abbrev-commit --date = relative"`.然后这样做`diff-branches master..branch-X`.现在它并不复杂. (3认同)
  • @Avery,您中的 `--all` 开关显示的不仅仅是请求的差异。 (2认同)

zai*_*eer 72

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

git log origin/master..origin/develop --oneline --no-merges
Run Code Online (Sandbox Code Playgroud)

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

如果要查看实际修改了哪些文件,请使用

git diff --stat origin/master..origin/develop --no-merges
Run Code Online (Sandbox Code Playgroud)

如果不指定参数,它将显示完整的差异.如果你想看到视觉差异,安装meld在Linux或WinMergeWindows上.确保它们是默认的difftools.然后使用类似的东西

git difftool -y origin/master..origin/develop --no-merges
Run Code Online (Sandbox Code Playgroud)

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

git fetch
git log origin/master..HEAD --oneline --no-merges
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您比较可能有合并的发布分支。您可能喜欢在参数 `--no-merges` 的帮助下删除合并提交(不添加任何值),例如:`git log origin/master..HEAD --oneline --no-merges` (2认同)

mvp*_*mvp 15

如果您使用的是Linux,gitg那么就可以非常快速地以图形方式进行操作.

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

git log --oneline --decorate
Run Code Online (Sandbox Code Playgroud)

为了在git log默认情况下更好,我通常设置这些全局首选项:

git config --global log.decorate true
git config --global log.abbrevCommit true
Run Code Online (Sandbox Code Playgroud)


mma*_*ska 12

我建议以下内容以查看"提交中"的区别.对于对称差异,请使用反向args重复命令:

git cherry -v master [your branch, or HEAD as default]
Run Code Online (Sandbox Code Playgroud)

  • 当然,“gitcherry”很聪明:它从“提交”转换为“补丁/差异”,并且可以避免报告两个分支上但以不同顺序应用的“补丁”。 (3认同)
  • 输出每个提交的 SHA1,前缀为 - 表示在 master 中具有等效项的提交,而 + 表示没有等效项的提交。 (2认同)

小智 8

如果你想使用gitk:

gitk master..branch-X
Run Code Online (Sandbox Code Playgroud)

它有一个很好的老派GUi


cla*_*ean 8

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

其他方法也有效,但我发现它们可能会添加我不需要的行,例如不添加任何值的合并提交。

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges
Run Code Online (Sandbox Code Playgroud)

或者你可以将你当前的与master进行比较

git fetch
git log origin/master..HEAD --oneline --no-merges
Run Code Online (Sandbox Code Playgroud)

git fetch是为了确保您使用的是更新的信息。

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


Ter*_*yễn 7

要查看所有提交,就像您在 PR 的“提交”选项卡中看到的那样,请运行以下命令:

1. 基本:

git log --oneline origin/base..origin/my-branch
Run Code Online (Sandbox Code Playgroud)

2. 如果您不需要分支/标签,请添加--no-decorate

git log --oneline --no-decorate origin/base..origin/my-branch
Run Code Online (Sandbox Code Playgroud)

3. 如果您想按时间顺序对提交进行排序(最旧的在前),请添加--reverse

git log --oneline --no-decorate --reverse origin/base..origin/my-branch
Run Code Online (Sandbox Code Playgroud)

我花了一段时间才发现这些华丽的东西。希望它对某人有帮助。


AIo*_*Ion 5

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

在此输入图像描述

转到您的存储库:Insights -> Network