2255

我想合并两个已经分开一段时间的分支,想知道哪些文件被修改了。

遇到了这个链接: http: //linux.yyz.us/git-howto.html这非常有用。

我遇到的比较分支的工具是:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

想知道是否有类似“git status master..branch”的东西只能看到两个分支之间不同的文件。

在不创建新工具的情况下,我认为这是您现在可以做到的最接近的方法(如果文件被多次修改,这当然会显示重复):

  • git diff master..branch | grep "^diff"

想知道我是否错过了什么......

4

18 回答 18

2770

将当前分支与main分支进行比较:

$ git diff --name-status main

比较任意两个分支:

$ git diff --name-status firstbranch..yourBranchName

官方文档git diff中有更多选项(特别是选项)。--name-status

于 2009-05-05T01:04:38.473 回答
432

尝试

$ git diff --stat --color master..branchName

这将为您提供有关每次更改的更多信息,同时仍使用相同数量的行。

如果您要以另一种方式合并,您还可以翻转分支以获得更清晰的差异图片:

$ git diff --stat --color branchName..master
于 2011-02-09T19:38:06.003 回答
171

还要记住,git 具有便宜且易于分支的功能。如果我认为合并可能有问题,我会为合并创建一个分支。因此,如果master有我想要合并的更改并且ba我的分支需要来自 master 的代码,我可能会执行以下操作:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

最终结果是,我必须先在一次性分支上尝试合并,然后再拧上我的分支。如果我把自己搞砸了,我可以删除ba-merge分支并重新开始。

于 2012-10-11T01:22:19.643 回答
59

如果有人试图从两个分支生成差异文件:

git diff master..otherbranch > myDiffFile.diff
于 2013-04-03T14:01:39.227 回答
45

还有一种基于 GUI 的方法。

您可以使用gitk

  1. 跑:

    $ gitk --all
    
  2. 右键单击分支的提交,然后在弹出菜单中选择标记此提交。

  3. 右键单击另一个分支的提交并选择Diff this -> 标记的提交Diff 标记的提交 -> this

然后在右下面板中将有一个更改的文件列表,在左下面板中将有差异详细信息。

于 2013-06-14T06:01:20.873 回答
38

另一种选择,在这种情况下使用融合:

git difftool -d master otherbranch

这不仅允许查看文件之间的差异,还提供了一种简单的方法来指向和单击特定文件。

于 2014-04-24T13:23:31.407 回答
28

请注意,如果您不喜欢结果,git 可以很容易地尝试合并并避免出现任何问题。这可能比提前寻找潜在问题更容易。

于 2009-05-05T00:59:54.333 回答
19

如果您只在某些文件中寻找更改,那么:

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1 是可选的,如果没有提供 branch1,将默认考虑您当前的分支(您所在的分支)。例如:

git diff master -- controller/index.js
于 2016-05-16T13:13:15.930 回答
15

在协作工作或同时处理多个功能时,上游甚至您的 master 包含未包含在您的分支中的工作,并且会错误地出现在基本差异中,这是很常见的。

如果您的上游可能已经移动,您应该这样做:

git fetch
git diff origin/master...

仅使用 git diff master 可以包含或不包含相关更改。

于 2015-03-24T03:21:32.840 回答
11

如果您使用的是IntelliJ IDEA,您还可以将任何分支与您当前的工作分支进行比较。有关详细信息,请参阅http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827。这在免费版中也可用。

于 2013-06-06T07:17:35.150 回答
8

有两个分支可以说

  • A(您正在工作的分支)
  • B(您要与之比较的另一个分支)

在分支 A 中,您可以输入

git diff --color B

那么这会给你一个输出

在此处输入图像描述

关于这一点的重要一点是

  1. 绿色文本存在于分支 A 中

  2. 分支 B 中存在红色文本

于 2016-10-04T11:56:48.420 回答
8

这里有很多答案,但我想添加一些我常用的东西。如果您在要比较的分支之一,我通常会执行以下操作之一。为了这个答案,我们会说我们在我们的二级分支中。取决于您当时需要的视图取决于您选择的视图,但大多数时候我使用的是两者中的第二个选项。如果您要恢复到原始副本,第一个选项可能会很方便 - 无论哪种方式,都可以完成工作!

这会将 master 与我们所在的分支(次要)进行比较,原始代码将是添加的行,新代码将被视为删除的行

git diff ..master

或者

这也会将 master 与我们所在的分支(次要)进行比较,原始代码将是旧行,新代码将是新行

git diff master..
于 2017-05-31T22:00:58.027 回答
2

如果您使用的是 Github / Github Enterprise,则可以通过点击/compare存储库路径的 url 来使用 Web UI,例如https://github.com/http4s/http4s/compare。您可以选择要比较的分支/提交/标记: Github 对比截图

并且差异将显示在 github 界面中的 url /compare/{x1}...{x2}where are x2and x1are the branch / commit / tag 你要比较,例如: https://github.com/http4s/http4s/compare/main...dotty

你可以在Github Doc中看到更多内容。

于 2019-12-03T09:37:32.557 回答
1

对于正在寻找 GUI 解决方案的人,Git Cola有一个非常不错的“Branch Diff Viewer ( Diff -> Branches.. )。

于 2019-04-17T04:55:52.760 回答
0
git diff revision_n revision_m

如果revision_nrevision_m是连续提交,那么它的输出与 git show revision_m

于 2019-03-01T09:49:19.010 回答
-1

您还可以使用视觉差异

例如,如果您使用Sourcetree,您可以简单地在 log view 中选择任意两个提交

(我个人更喜欢在大多数情况下使用 GUI,我将这个发布给那些可能不熟悉 GUI 选项的人。)

于 2019-06-27T16:09:36.177 回答
-2

如果您喜欢 GUI 并使用 Windows,这里有一个简单的方法。

  1. 下载 WinMerge
  2. 将两个分支签出到不同的文件夹中
  3. 使用 WinMerge 逐个文件夹进行比较。如果其中一个分支是您正在处理的分支,您也可以轻松地进行修改。
于 2018-06-19T23:21:20.643 回答
-3

您还可以使用TortoiseGit轻松比较已更改文件的分支。只需单击Browse References并选择要比较的分支。

例如,如果您将您的分支master进行比较,您将得到一个文件列表,如果您决定将您的分支合并到master中,这些文件将在master中更改。

请记住,如果将masteryour-branch以及your-branchmaster进行比较,您将得到不同的结果。

于 2017-10-18T09:53:19.417 回答