我有一个脚本,在一个分支中运行良好,而在另一个分支上却被破坏。我想并排看两个版本,看看有什么不同。有办法做到这一点吗?
要清楚的是,我不是在寻找比较工具(我使用Beyond compare)。我正在寻找一个Gitdiff命令,该命令允许我将主版本与当前分支版本进行比较,以查看发生了什么变化。我没有在合并或其他事情中。我只是想说
git diff mybranch/myfile.cs master/myfile.cs
我有一个脚本,在一个分支中运行良好,而在另一个分支上却被破坏。我想并排看两个版本,看看有什么不同。有办法做到这一点吗?
要清楚的是,我不是在寻找比较工具(我使用Beyond compare)。我正在寻找一个Gitdiff命令,该命令允许我将主版本与当前分支版本进行比较,以查看发生了什么变化。我没有在合并或其他事情中。我只是想说
git diff mybranch/myfile.cs master/myfile.cs
您可以这样做:git diff branch1:路径/to/file branch2:路径/to-file
如果已配置difftool,则还可以:git difftool branch1:路径/to/file branch2:路径/to-file
相关问题:如何使用首选的diff工具/查看器查看“gitdiff”输出?
gitdiff可以显示两次提交之间的区别:
git diff mybranch master -- myfile.cs
或者,等效地:
git diff mybranch..master -- myfile.cs
注意,必须指定文件的相对路径。因此,如果文件位于src目录中,您可以使用src/myfile.cs而不是myfile.cs。
使用后一种语法,如果任一侧是HEAD,则可以省略(例如,master..将master与HEAD进行比较)。
你也可能对我的分支机构感兴趣。。。master(来自gitdiff文档):
此表单用于查看包含第二个<commit>的分支上的更改,从这两个<commmit>的共同祖先开始。git diff A…B相当于git diff$(git merge base A B)B。
换言之,这将在master中提供不同的更改,因为它与mybranch不同(但此后在mybranch中没有新的更改)。
在所有情况下,文件名前面的--分隔符表示命令行标志的结束。这是可选的,除非如果参数引用提交或文件,Git会感到困惑,但包含它并不是一个坏习惯。参见Dietrich Epp对Git结账双破折号含义的回答。
如果配置了git difftool,则可以将相同的参数传递给git difftools。
更现代的语法:
git diff ..master path/to/file
双点前缀表示“从当前工作目录到”。你也可以说:
主人即与上述相反。这与master相同。我的分支。。master,显式引用当前工作树以外的状态。v2.0.1..master,即引用标记。[参考规范]。。[refspec],基本上是Git的代码状态。
我只需执行git diff branch1 branch2路径/to/file
这将检查文件之间的差异。分支1的变化将显示为红色。分支2的变化将为绿色。
假设分支1是过去,分支2是未来。您可以通过反转diff:gitdiffbranch2-branch1中分支的顺序来反转这一点
我同意达尔比克的回答。如果希望将diff写入diff文件以进行代码检查,请使用以下命令。
git diff branch master -- filepath/filename.extension > filename.diff --cached
为了比较Git Bash中的两个文件,您需要使用以下命令:
git diff <Branch name>..master -- Filename.extension
该命令将在Bash本身中显示两个文件之间的差异。
有多种方法可以比较来自两个不同分支的文件:
选项1:如果要将文件从n个特定分支与另一个特定分支进行比较:git diff branch1名称branch2名称路径/to/file例子:git diff mybranch/myfile.cs mysecondbranch/mdfile.cs在本例中,您将“mybranch”分支中的文件与“mysecondbranch”分支中的文件。选项2:简单方法:git diff branch1:文件branch2:文件例子:git diff mybranch:myfile.cs mysecondbranch:m:file.cs此示例与选项1类似。选项3:如果要将当前工作目录与某个分支进行比较:git差异。。someBranch路径/to/file例子:git差异。。主myfile.cs在本例中,您将实际分支中的文件与主分支中的文件。
最好的方法是按以下方式使用gitdiff:
git diff<source_branch><target_branch>--文件路径
它将检查这些分支中文件之间的差异。查看本文,了解有关Git命令及其工作方式的更多信息。
在我的情况下,我使用以下命令:
git diff <branch name> -- <file path + file name>
此命令可以帮助您比较两个不同分支中的同一文件。
如果您想对当前分支进行比较,可以提交并使用:
git diff $BRANCH -- path/to/file
这样,它将从当前分支与引用的分支($branch)不同。
有两种方案可以比较文件:
场景1:比较远程分支处的文件(两个分支都应存在于远程存储库中)
场景2:将本地文件(在本地工作区副本)与远程存储库中的文件进行比较。
逻辑很简单。如果您向diff提供两个分支名称,它将始终比较远程分支,如果您只提供一个分支名称的话,它将总是将本地工作副本与远程存储库(您提供的)进行比较。您可以使用范围提供远程存储库。
例如,签出分支:
git checkout branch1
git diff branch2 [filename]
在这种情况下,如果您提供文件名,它会将文件名的本地副本与名为“branch2”的远程分支进行比较。
git diff branch1 branch2 [filename]
在本例中,它将比较名为“branch1”和“branch2”的远程分支的文件名
git diff ..branch2 [filename]
在本例中,它还将比较名为“branch1”和“branch2”的远程分支的文件名。所以,和上面一样。但是,如果您刚刚从另一个分支创建了一个分支,比如说“master”,并且您当前的分支在远程存储库中不存在,那么它将比较远程“master”和远程“branch2”。
关于这些不同的比较方法,还有一个有趣的点:我想将当前分支中的文件与另一个分支中的相同文件进行比较。如果我使用
git difftool otherbranch.. filespec
我最后比较了两个文件,它们实际上在我的临时文件夹中。但是,如果我使用
git difftool otherbranch filespec
我最终将临时文件夹中的一个文件(其他分支上的版本)与Git文件夹中的实际文件进行了比较,这a)让我更容易分辨哪个是哪个,b)意味着我可以使用diff工具(在我的例子中是Beyond Compare 4)将更改从其他分支复制到当前分支。
对于Visual Studio代码,我强烈建议扩展:
Git历史差异文档
您可以使用它在文件之间甚至分支之间进行两次比较!
在控制台中,您可以简单地使用以下命令:
git diff <Your_Branch> <Branch_To_Compare_With> -- myfile.cs