关于git:如何比较两个不同分支的文件?

How to compare files from two different branches?

我有一个脚本在一个分支中运行良好,在另一个分支中被破坏。我想并排看两个版本,看看有什么不同。有什么办法吗?

很明显,我不是在寻找一个比较工具(我使用超越比较)。我正在寻找一个git diff命令,它允许我将主版本与当前的分支版本进行比较,以查看发生了什么变化。我不在合并或其他事情的中间。我只想说

1
git diff mybranch/myfile.cs master/myfile.cs

git diff可以显示两个承诺之间的差异:

1
git diff mybranch master -- myfile.cs

或者,等价地:

1
git diff mybranch..master -- myfile.cs

使用后一种语法,如果任意一方是HEAD,则可以省略(例如,master..masterHEAD进行比较)。

您也可能对mybranch...master感兴趣(来自git diff文件):

This form is to view the changes on the branch containing and up to the second , starting at a common ancestor of both . git diff A...B is equivalent to git diff $(git-merge-base A B) B.

换言之,这将使master的变化有所不同,因为它与mybranch不同(但从那时起在mybranch中没有新的变化)。

在所有情况下,文件名前面的--分隔符指示命令行标志的结束。这是可选的,除非当参数引用提交或文件时Git会感到困惑,但包含它并不是一个坏习惯。请参阅https://stackoverflow.com/a/13321491/54249了解一些示例。

如果配置了一个参数,则可以将相同的参数传递给git difftool


您可以这样做:git diff branch1:file branch2:file

如果配置了difftool,则还可以:江户十一〔一〕号

相关问题:如何使用Visual Diff程序查看Git Diff输出


更现代的语法:

埃多克斯1〔14〕

双点前缀表示"从当前工作目录到"。你也可以说:

  • master..,即与上述相反。这与master相同。
  • mybranch..master,显式引用当前工作树以外的状态。
  • v2.0.1..master,即引用一个标记。
  • [refspec]..[refspec],基本上是Git可以识别为代码状态的任何东西。

有许多方法可以比较来自两个不同分支的文件:

  • 选项1:如果要将文件从n个特定分支与另一个特定分支进行比较:

    1
    git diff branch1name branch2name path/to/file

    例子:

    1
    git diff mybranch/myfile.cs mysecondbranch/myfile.cs

    In this example you are comparing the file in"mybranch" branch to the
    file in the"mysecondbranch" branch.

  • 选项2:简单方法:

    1
     git diff branch1:file branch2:file

    例子:

    1
     git diff mybranch:myfile.cs mysecondbranch:myfile.cs

    This example is similar to the option 1.

  • 选项3:如果要将当前工作目录与某个分支进行比较:

    1
    git diff ..someBranch path/to/file

    例子:

    1
    git diff ..master myfile.cs

    In this example you are comparing the file from your actual branch to
    the file in the master branch.


我只不过做了一件事。

这将检查文件之间的差异。branch1的变化将是红色的。branch2的变化将是绿色的。

假设branch1是过去,branch2是未来。您可以通过颠倒diff:git diff branch2 branch1中分支的顺序来反转此操作。


同意@dahlbyk建议的答案。如果要将diff写入diff文件进行代码检查,请使用以下命令。

1
git diff branch master -- filepath/filename.extension > filename.diff --cached


如果要与当前分支进行比较,可以操作并使用:

埃多克斯1〔28〕

这样它将从当前分支到引用的分支(分支)。


在我的例子中,我使用以下命令:

1
git diff <branch name> -- <path + file name>

此命令可以帮助您比较两个不同分支中的同一个文件


按如下方式使用提交哈希:

1
git diff <hash1> <hash2> <filename>

其中hash1可以是来自任何分支的任何提交,hash2也是如此。


最好的方法是通过以下方式使用git diff:埃多克斯1〔27〕

它将检查这些分支中的文件之间的差异。查看本文,了解关于git命令及其工作方式的更多信息。


要比较Git bash中的两个文件,需要使用以下命令:

1
git diff <Branch name>..master -- Filename.extension

这个命令将显示bash本身中两个文件的区别。