我怎样才能看到两个分支之间的差异?

3069
如何查看分支branch_1branch_2之间的差异?

39
你希望得到一种不同于直接输入“git diff branch_1 branch_2”的方式吗?(注意,如果 branch_1 和 branch_2的名称也是文件名,则需要使用“git diff branch_1 branch_2 --”) - torek
7
Git分支的区别:Git是一种分布式版本控制系统,它通过分支来管理代码库的不同版本。每个分支都包含从主分支衍生出来的独立代码副本。主分支通常称为主线或主分支,其他分支可以用于开发新功能或修复问题。这些分支可以并行存在,并且可以合并成一个单独的代码库。不同的Git分支之间的差异取决于它们在创建后所做的修改。在切换分支时,Git会将更改应用到您的工作目录中的文件,以使其与选择的分支匹配。当您在一个分支上进行提交时,该分支会将更改存储在自己的历史记录中。如果您合并两个分支,则Git会比较这些分支的历史记录,并尝试将它们组合成一个新的代码库。 - Bijendra
73
所引用的重复内容并没有回答这个问题...... 通过使用 git diff --name-status master..branchName 确定哪些文件已更改,与使用类似 git diff branch_1 branch_2 的方法查看分支之间的确切差异有明显的区别。或许我漏掉了一些显而易见的东西... - jww
54
不仅“duplicate”(重复)是另一个问题,而且这个问题是“git diff 两个分支”的谷歌搜索结果排名第一。 - Rob Osborne
6
git difftool branch..otherBranch 命令可以让你使用可视化工具(如 Meld)来查看分支之间的差异。这就是答案。 - Greg Rundlett
显示剩余2条评论
9个回答

3851
使用git diff命令。
git diff [<options>] <commit>..​<commit> [--] [<path>…​]

""是一个分支名称、提交哈希值或简写的符号引用。
示例:
git diff abc123..def567
git diff HEAD..origin/master 这将生成两个分支末端之间的差异。如果您更喜欢找到从它们的共同祖先到测试的差异,您可以使用三个点而不是两个点。
git diff <commit>...<commit>

要检查哪些文件不同,而不是内容如何不同,请使用--name-only
git diff --name-only <commit>..​<commit>

请注意,在..(两个点)语法中,点是可选的;以下是同义词:
git diff commit1 commit2

63
相同的语法可用于比较分支与标签,或者标签与另一个标签。 - Daniel Zohar
70
请注意,上述两个命令后面也可以添加文件或文件夹的名称。 - msanford
13
@chiyachaiya你的解释对我很有帮助,但是git diff b1...b2和git diff b2...b1是不同的。例如,我们曾经从b1开始创建了b2,如果我们对b1进行了一些更改,那么git diff b2...b1将显示在b2开始后对b1所做的更改。如果我们执行git diff b1...b2,则会列出仅存在于b2中而不在b1中的更改。 - Chintak Chhapia
52
如果你得到了 fatal: bad revision 'some-branch' 的错误提示,那么很可能是一个远程分支。你可能需要执行类似于 git diff remotes/origin/some-branch my-local-branch 这样的命令。 - Dalin
84
git diff ..branch_2 比较当前分支与 branch_2 分支的差异。 - sweisgerber.dev
显示剩余29条评论

152

进入一个分支(例如 main),然后对比另一个分支(例如 branch2)运行diff命令:

git checkout main
git diff branch2

7
这对我没用,它没有显示任何更改。不过,我只有本地提交。 - rob
1
尝试在分支名称前加上远程名称,例如 origin/ - bvanlew

59
git diff master..develop

选项:

  • 添加--name-only仅查看文件名称。
  • 在末尾添加-- folderOrFileName以查看特定文件或文件夹的更改。
  • 要将本地分支与远程分支进行比较,请运行git fetch --all以获取所有远程分支,然后运行:
git diff --name-only [branchName]..origin/[branchName]
git diff --name-only develop..origin/develop

1
你的存储库中,“master”现在可能被替换为“main”。 - Yzmir Ramirez

20
你可以简单地使用git diff b1...b2来显示差异,或者你可以使用git log b1..b2来显示提交的差异。
你可以使用git log --oneline --graph --decorate --abbrev-commit b1..b2以漂亮的图形方式查看提交的差异。

2
我不知道关于 git log b1 b2 的事情,谢谢! - Geoff Langenderfer
个人而言,我喜欢这个图表。当您在多个分支上工作并将它们合并时,它看起来非常棒。 - Bip Lob

14

有许多不同的方法来比较分支,这取决于您需要的具体用例。

很多时候你想要比较是因为出了问题,你想要看看改变了什么,然后修复它,并在提交之前再次查看改变了什么。

个人而言,在查看差异时我喜欢做的:

git checkout branch_1 # checkout the oldest branch
git checkout -b compare-branch # create a new branch
git merge --no-commit --squash branch_2 # put files from the new branch in the working folder
git status # see file names that changes
git diff # see the content that changed.
使用此解决方案,您将看到差异,您还可以使用git status仅查看文件名,并且最重要的部分是您将能够在查看差异时执行branch_2(branch_2位于工作树上)。如果出现问题,您可以编辑文件并进行修复。随时可以再次键入git statusgit diff以查看从新编辑到branch_a的差异。

8
有时候以树形结构查看差异很方便...
使用以下命令可以比较两个分支的不同之处:
git difftool --dir-diff branch..otherBranch
或者将远程分支与本地工作区进行比较:
git difftool --dir-diff origin/branch .
例如,当 Bitbucket 由于性能原因决定仅显示“三路合并”差异而非您选择的两个分支之间的实际完整差异时。
这将在您选择的工具中以树形结构显示差异。例如,在 meld 中。
受 @GregRundlett 评论启发。

我忘记链接到他们已经删除了一个关键的差异能力以优化他们的性能(“成本?”)的令人震惊的承认。 - poleguy

7

有两种方法可以查看两个分支之间的差异。使用以下命令可以显示每个分支中文件所做的修改。

  1. 使用git diff命令查看Git存储库中两个分支之间的差异。

    git diff branch1 branch2将显示所有差异。

    如果您想比较两个分支之间的特定文件,可以使用以下命令:

    git diff branch1 branch2 path/to/file

  2. git log命令也可用于查看两个分支之间的差异。使用—left-right参数和要比较的两个分支运行git log命令,如下所示:

    git log --left-right branch1...branch2


1
第二个选项正是我所需要的。这是一个快速进行提交差异比较的完美单行代码。如果想要更快速地查看,请使用 HEAD 来引用当前分支的位置,并添加名为 --oneliner 的选项来缩小到仅包含提交信息。例如:git log --left-right --oneline HEAD...branch2 - Boaz

1

当在功能分支上时,合并您的目标分支,然后对其运行差异。例如,如果您想查看您的feature分支添加到master的更改,请执行以下操作:

// Fetch from all remotes
git fetch

// Check out your feature branch
git checkout feature

// Merge origin/master to your branch
git merge origin/master

// Compare to origin/master
git diff origin/master

0
在Eclipse(J2EE版本)中,打开“窗口-->显示视图-->Git仓库”。如果您已经检出了2个本地git分支作为示例,则本地部分将有一堆分支。选择任意2个git本地分支,并在树形菜单中“右键单击并选择“彼此比较”。 打开“Git Tree Compare”视图,您就可以看到所有文件的并排差异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接