协慌网

登录 贡献 社区

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

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

要明确我不是在寻找比较工具(我使用 Beyond Compare)。我正在寻找一个 git diff 命令,它允许我将主版本与我当前的分支版本进行比较,看看有什么变化。我不是在合并或任何事情的中间。我只想说些什么

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

答案

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 AB) B

换句话说,这会给中变化的差异master ,因为它从分歧mybranch (但不从那时起新的变化mybranch )。


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


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

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

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

相关问题: 如何使用 visual diff 程序查看 git diff 输出

更现代的语法:

git diff ..master path/to/file

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

  • master.. ,即上面的反面。这跟master
  • mybranch..master ,显式引用当前工作树以外的状态。
  • v2.0.1..master ,即引用标记。
  • [refspec]..[refspec] ,基本上可以识别为 git 的代码状态。