如何比较两个不同分支的文件?

我有一个脚本在一个分支中工作正常,在另一个分支中被破坏 . 我想并排看两个版本,看看有什么不同 . 有没有办法做到这一点?

To be clear 我'm not looking for a compare tool (I use Beyond Compare). I'正在寻找一个git diff命令,它允许我将主版本与我当前的分支版本进行比较,看看有什么变化 . 我不是在合并或任何事情的中间 . 我只是想说些什么

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

回答(8)

3 years ago

git diff 可以显示两次提交之间的区别:

git diff mybranch master -- myfile.cs

或者,等效地:

git diff mybranch..master -- myfile.cs

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

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

此表单用于查看包含第二个<commit>的分支上的更改,从<commit>的共同祖先开始 . git diff A ... B相当于git diff $(git-merge-base A B)B .

换句话说,这将在 master 中给出一个变化差异,因为它与 mybranch 不同(但自 mybranch 以来没有新的变化) .


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


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

3 years ago

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

如果您配置了difftool,那么您还可以: git difftool branch1:file branch2:file

相关问题:How do I view git diff output with visual diff program

3 years ago

更现代的语法:

git diff ..master path/to/file

双点前缀表示“从当前工作目录到” . 你也可以说:

  • master.. ,即与上述相反 . 这与 master 相同 .

  • mybranch..master ,显式引用当前工作树以外的状态 .

  • v2.0.1..master ,即引用标签 .

  • [refspec]..[refspec] ,基本上可以识别为git的代码状态 .

3 years ago

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

  • Option 1: 如果要将n个特定分支的文件与另一个特定分支进行比较:
git diff branch1name branch2name path/to/file

Example:

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

在此示例中,您将“mybranch”分支中的文件与“mysecondbranch”分支中的文件进行比较 .

  • Option 2: 简单方法:
git diff branch1:file branch2:file

Example:

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

此示例与选项1类似 .

  • Option 3: 如果要将当前工作目录与某个分支进行比较:
git diff ..someBranch path/to/file

Example:

git diff ..master myfile.cs

在此示例中,您将实际分支中的文件与主分支中的文件进行比较 .

3 years ago

我只是做 git diff branch1 branch2 path/to/file

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

假设 branch1 是过去而 branch2 是未来 . 你可以通过反转diff中分支的顺序来反转这个: git diff branch2 branch1

3 years ago

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

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

3 years ago

最好的方法是通过以下方式使用 git diffgit diff <source_branch> <target_branch> -- file_path

它将检查这些分支中的文件之间的差异 . 有关git commands以及它们如何工作的更多信息,请查看本文 .

3 years ago

为了比较git bash中的两个文件,您需要使用以下命令:

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

此命令将显示bash本身中两个文件之间的差异 .