首页 文章

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

提问于
浏览
1176

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

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 回答

  • 1705

    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 .

  • 327

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

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

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

  • 133

    更现代的语法:

    git diff ..master path/to/file

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

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

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

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

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

  • 0

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

    • 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
    

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

  • 2

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

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

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

  • 0

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

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

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

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

  • 13

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

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

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

相关问题