关于git:显示在两个版本之间更改了哪些文件

Showing which files have changed between two revisions

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

找到了这个链接: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"

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


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

1
$ git diff --name-status master

要比较任意两个分支:

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

阅读官方文件中有关git diff的内容。


尝试

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

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

如果您要以另一种方式合并,您还可以翻转分支以更清楚地了解差异:

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


还要记住,Git具有廉价且容易分支的特性。如果我认为合并可能有问题,我会为合并创建一个分支。因此,如果master有我想要合并的更改,而ba是我的分支,需要master提供代码,我可以执行以下操作:

1
2
3
4
5
6
7
8
9
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分支,重新开始。


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

1
git diff master..otherbranch > myDiffFile.diff


还有一种基于GUI的方法。

你可以使用Gitk。

  • 运行:

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

  • 右键单击另一个分支的提交,然后选择diff this->marked commit或diff marked commit->this。
  • 然后在右下面板中会有一个已更改的文件列表,在左下面板中会有差异详细信息。


    还有一个选择,在这种情况下使用meld:

    1
    git difftool -d master otherbranch

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


    请注意,Git可以很容易地尝试合并,如果您不喜欢这个结果,就可以避免任何问题。这可能比预先寻找潜在的问题容易。


    如果只在某些文件中查找更改,则:

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

    Branch1是可选的,如果未提供Branch1,则默认情况下将考虑当前分支(您所在的分支)。例如:

    1
    git diff master -- controller/index.js

    当以协作方式工作或同时在多个功能上工作时,通常上游或甚至主控形状都包含分支中未包含的工作,并且这些工作将错误地出现在基本差异中。

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

    1
    2
    git fetch
    git diff origin/master...

    仅使用git diff master就可能包含或无法包含相关更改。


    如果您使用的是Intellij思想,那么还可以将任何分支与当前工作分支进行比较。有关详细信息,请参阅http://www.jetbrains.com/idea/webhelp/merging deleting and comparising branches.html_d288093e3827。这也是免费版本。


    这里有很多答案,但我想添加一些我常用的答案。如果你在其中一个分支,你想比较,我通常做以下之一。为了这个答案,我们将说我们在我们的第二分支。取决于你当时需要什么样的视图,这取决于你选择哪种视图,但大多数时候我使用的是这两种视图中的第二种。如果您试图还原到原始副本,第一个选项可能很方便——无论哪种方法,都可以完成任务!

    这将把master与我们所在的分支(第二个分支)进行比较,原始代码将是添加的行,新代码将被视为删除的行。

    1
    git diff ..master

    这还将把master与我们所在的分支(第二个分支)进行比较,原始代码将是旧行,新代码将是新行。

    1
    git diff master..


    我们可以说有两个分支

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

    在分支A中,您可以键入

    1
    git diff --color B

    那么这将给你一个输出

    enter image description here

    重要的是

  • 分支A中存在绿色文本

  • 分支B中存在红色文本


  • 对于寻找GUI解决方案的人来说,Git-Cola有一个非常好的"分支差异查看器(diff->branches….)"。


    如果您喜欢图形用户界面并且正在使用Windows,这里有一个简单的方法。

  • 下载WinMerge
  • 将这两个分支签入不同的文件夹
  • 使用WinMerge逐文件夹比较。如果其中一个分支是您正在处理的分支,那么您也可以轻松地进行修改。

  • 1
    git diff revision_n revision_m

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


    您还可以使用例如TortoisGit轻松比较更改文件的分支。只需单击浏览引用并选择要比较的分支。

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

    请记住,如果您将master与分支进行比较,将得到不同的结果,并将分支与master进行比较。