在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

其他回答

你也可以比较两个不同版本的文件,如下所示:

Git diff <revision_1>:<file_1> <revision_2>:<file_2>

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

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

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

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

如果你想在Windows上进行简单的可视化比较,比如你可以在visual SourceSafe或Team Foundation Server (TFS)中获得,试试这个:

在文件资源管理器中右键单击该文件 选择“Git历史记录”

注意:升级到Windows 10后,我失去了Git上下文菜单选项。但是,您可以在命令窗口中使用'gitk'或'gitk filename'来实现相同的功能。

一旦你调用'Git History', Git GUI工具将启动,文件的历史记录在左上方窗格中。选择一个您想要比较的版本。然后右键单击第二个版本并选择其中之一

Diff this ->被选中

or

Diff selected -> this

颜色编码的差异将出现在左下角的窗格中。

查看$ git log,复制两次不同提交的SHA-1 ID,并使用这些ID执行git diff命令。例如:

$ git diff (sha-id-one) (sha-id-two)

这只是另一种使用Git的方式……

git difftool HEAD HEAD@{N} /PATH/FILE.ext