在Git中,如何在同一个分支(例如master)上的两个不同提交(不是连续的)之间比较相同的文件?

我正在寻找一个类似于Visual SourceSafe (VSS)或Team Foundation Server (TFS)中的比较功能。 在Git中可以吗?


当前回答

如果你有几个文件或目录,想要比较非连续提交,你可以这样做:

创建临时分支(本例中为“revision”)

git checkout -b revision

倒回到第一个提交目标

git reset --hard <commit_target>

对那些有兴趣的人挑刺

git cherry-pick <commit_interested> ...

应用比较

git diff <commit-target>^

当你完成时

git branch -D revision

其他回答

如果你有几个文件或目录,想要比较非连续提交,你可以这样做:

创建临时分支(本例中为“revision”)

git checkout -b revision

倒回到第一个提交目标

git reset --hard <commit_target>

对那些有兴趣的人挑刺

git cherry-pick <commit_interested> ...

应用比较

git diff <commit-target>^

当你完成时

git branch -D revision

如果你已经配置了“扩散工具”,你可以使用

git difftool revision_1:file_1 revision_2:file_2

示例:比较一个文件在同一个分支上的上一次提交和上一次提交: 假设您在项目根文件夹中

$git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java

在~/中应该有以下条目。Gitconfig或在project/中。git /配置文件。安装p4merge。

[merge]
    tool = p4merge
    keepBackup = false
[diff]
    tool = p4merge
    keepBackup = false
[difftool "p4merge"]
    path = C:/Program Files (x86)/Perforce/p4merge.exe
[mergetool]
    keepBackup = false
[difftool]
    keepBackup = false
[mergetool "p4merge"]
    path = C:/Program Files (x86)/Perforce/p4merge.exe
    cmd = p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"

注意:如果你使用的是Intellij企业版或社区版——它有一个很好的工具,可以在合并/重基时进行3路合并

对于简单的差异,您可以右键单击->Git->比较与修订

选择您感兴趣的修订版本

Intellij将显示差异。

如果你想对多个文件进行diff,使用@mipadi指定的方法:

例如,HEAD和master之间的差异,找到所有的。coffee文件:

git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`

这将递归搜索your_search_folder/所有的.coffee文件,并在它们和它们的主版本之间做出区别。

如果希望在每次提交的基础上查看两次提交之间对文件的所有更改,也可以这样做

Git log -u $start_commit..$end_commit——path/to/file

其他的回答都比较完整,给它们点赞吧。 这只是为了记住,您可以避免知道最近提交的id。通常,我将自己设置在我想要比较的分支中,并运行diff工具,知道旧的提交uid(你可以使用其他符号):

git checkout master
git difftool 6f8bba my/file/relative/path.py

另外,检查这里的其他响应来设置你想要git打开的工具来比较文件: 使用.gitconfig配置diff工具 要了解更多关于difftool的知识,请访问difftool文档