在Git中,如何在同一个分支(例如master)上的两个不同提交(不是连续的)之间比较相同的文件?
我正在寻找一个类似于Visual SourceSafe (VSS)或Team Foundation Server (TFS)中的比较功能。 在Git中可以吗?
在Git中,如何在同一个分支(例如master)上的两个不同提交(不是连续的)之间比较相同的文件?
我正在寻找一个类似于Visual SourceSafe (VSS)或Team Foundation Server (TFS)中的比较功能。 在Git中可以吗?
当前回答
来自git-diff manpage:
git diff [--options] <commit> <commit> [--] [<path>...]
例如,要查看文件“main.c”在现在和两次提交之间的区别,这里有三个等效的命令:
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c
其他回答
来自git-diff manpage:
git diff [--options] <commit> <commit> [--] [<path>...]
例如,要查看文件“main.c”在现在和两次提交之间的区别,这里有三个等效的命令:
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c
如果你有几个文件或目录,想要比较非连续提交,你可以这样做:
创建临时分支(本例中为“revision”)
git checkout -b revision
倒回到第一个提交目标
git reset --hard <commit_target>
对那些有兴趣的人挑刺
git cherry-pick <commit_interested> ...
应用比较
git diff <commit-target>^
当你完成时
git branch -D revision
如果你想对多个文件进行diff,使用@mipadi指定的方法:
例如,HEAD和master之间的差异,找到所有的。coffee文件:
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
这将递归搜索your_search_folder/所有的.coffee文件,并在它们和它们的主版本之间做出区别。
这只是另一种使用Git的方式……
git difftool HEAD HEAD@{N} /PATH/FILE.ext
如果希望在每次提交的基础上查看两次提交之间对文件的所有更改,也可以这样做
Git log -u $start_commit..$end_commit——path/to/file