我有一个脚本在一个分支上运行正常,在另一个分支上却出现问题。我想将这两个版本并排比较,看看有什么不同之处。有没有办法可以做到这一点?
明确一下:我不是在寻找比较工具(我使用的是Beyond Compare)。我正在寻找Git diff命令,以便将主版本与当前分支版本进行比较,查看有哪些变化。我也没有处于合并过程中或者其他任何情况。我只是想说类似于:
git diff mybranch/myfile.cs master/myfile.cs
我有一个脚本在一个分支上运行正常,在另一个分支上却出现问题。我想将这两个版本并排比较,看看有什么不同之处。有没有办法可以做到这一点?
明确一下:我不是在寻找比较工具(我使用的是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
注意,您必须指定文件的相对路径。因此,如果文件在src目录中,则应说src/myfile.cs
而不是myfile.cs
。
使用后一种语法,如果任何一侧为HEAD
,则可以省略(例如,master..
将master
与HEAD
进行比较)。
您还可能对mybranch...master
感兴趣(来自git diff
文档):
此形式用于查看包含并高达第二个
<commit>
的分支上的更改,从两个<commit>
的共同祖先开始。git diff A...B
等效于git diff $(git-merge-base A B) B
。
换句话说,这将给出自mybranch
分叉以来master
中的更改差异(但不包括此后mybranch
中的新更改)。
--
分隔符表示命令行标志的结束(注意分隔符和文件名之间的空格)。这是可选的,除非Git会因为参数引用了提交或文件而感到困惑,但包含它并不是一个坏习惯。请参见Dietrich Epp对Git checkout double dashes的解答,其中有一些例子。
如果您已经配置了一个,可以将相同的参数传递给git difftool
。
git diff branch1 branch2 myfile.cs
进行比较。(现在不需要加上 --
符号了,因为它只能接受最多两个修订参数。) - Cascabel--
。这是一个常见且容易犯的错误。) - Cascabelgit diff --name-status branch1..branch2
来展示完整路径(这可能是显而易见的,但我想提一下,以防其他人有同样的问题)。 - hBrentgit diff branch1:path/to/file branch2:path/to/file
如果你已经配置了 difftool,那么还可以这样做:
git difftool branch1:path/to/file branch2:path/to/file
相关问题:
如何使用我喜欢的差异工具/查看器查看 'git diff' 输出?branch1:./file
)。如果文件在分支之间的不同位置上(例如:git diff branch1:old/path/to/file branch2:new/path/to/file
),这也是非常有用的。 - redbmkgit diff branch1 branch2 path/to/file
命令即可。 - Cascabel更现代化的语法:
git diff ..master path/to/file
双点前缀表示“从当前工作目录到”。你也可以说:
master..
,即上面的反向。这与master
相同。mybranch..master
,明确引用当前工作树之外的状态。v2.0.1..master
,即引用标签。[refspec]..[refspec]
,基本上是任何可识别为Git代码状态的东西。有很多方法可以比较来自两个不同分支的文件:
Option 1: If you want to compare the file from n specific branch to another specific branch:
git diff branch1name branch2name path/to/file
Example:
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.
Option 2: Simple way:
git diff branch1:file branch2:file
Example:
git diff mybranch:myfile.cs mysecondbranch:myfile.cs
This example is similar to the option 1.
Option 3: If you want to compare your current working directory to some branch:
git diff ..someBranch path/to/file
Example:
git diff ..master myfile.cs
In this example you are comparing the file from your actual branch to the file in the master branch.
对于Visual Studio Code,我强烈推荐使用以下扩展:
Git History Diff docs
您可以使用它来比较文件或分支之间的差异!
从控制台,您只需使用此命令:
git diff <Your_Branch> <Branch_To_Compare_With> -- myfile.cs
如果您希望根据当前分支进行差异比较,可以将更改提交,并使用以下命令:
git diff $BRANCH -- path/to/file
这样做将使它与参考分支($BRANCH
)之间的差异不同于当前分支。
我只需要执行以下命令:git diff branch1 branch2 path/to/file
这个命令可以检查文件之间的差异。来自branch1
的更改将显示为红色,而来自branch2
的更改将显示为绿色。
假设branch1
代表过去,而branch2
代表未来。如果要反转比较顺序,可以交换分支的顺序:git diff branch2 branch1
有两种比较文件的场景:
场景1:比较远程分支上的文件(远程仓库中必须存在这两个分支)
场景2:比较本地工作区拷贝的文件与远程仓库中的文件
逻辑很简单,如果您给 diff 提供了两个分支名称,它将始终比较远程分支;如果您只提供一个分支名称,则它将始终比较您的本地工作区拷贝和远程仓库(您提供的那一个)。您可以使用范围来提供远程仓库。
例如,检出一个分支:
git checkout branch1
git diff branch2 [filename]
在这种情况下,如果您提供文件名,它将会比较您本地的文件名和名为“branch2”的远程分支。
git diff branch1 branch2 [filename]
git diff ..branch2 [filename]
git diff <branch name> -- <file path + file name>
这个命令可以帮助您比较两个不同分支中的相同文件。
我同意dahlbyk的答案。如果你想将差异写入差异文件以进行代码审查,请使用以下命令。
git diff branch master -- filepath/filename.extension > filename.diff --cached