显示两个版本间的差异
2013-11-30 09:55
211 查看
显示两个版本间的差异:
git diff rev1 rev2
# git log
commit f22369978d8e054b8f032f36783a00a8476196a6
<----这里的f22369978d8e054b8f032f36783a00a8476196a6就是一个版本
Author:XXX <XXXX@gmail.com>
Date: Sun Jun 9 10:17:14 2013 +0800
那么如果我们需要比较当前版本和上一个版本的差异,上面命令中的rev1就可以使用HEAD替代:
git diff HEAD rev2
git diff [options] [<commit>] [--] [<path>...]
git diff [options] --cached [<commit>] [--] [<path>...]
git diff [options] <commit> <commit> [--] [<path>...]
git diff [options] [--no-index] [--] <path> <path>
其中,注意形式1和形式3,不同的是形式3有两个<commit>部分,而形式1只有一个<commit>部分,其说明如下:
This form is to view the changes you have in your working tree relative to the named <commit>.
因此,上面命令中的HEAD可以省去。
git diff rev2
【注】此处请注意是working tree,因此,如果要比较版本库中的最后一次版本和上一版本的差异,使用此命令的限制必须是working tree和版本库中保持一致,即使用git st查看没有任何改动。
<rev>^<n>
A suffix ^ to a revision parameter means the first parent of that commit object.
^<n> means the <n>th parent, (i.e. <rev>^ is equivalent to
<rev>^1). As a special rule, <rev>^0 means the commit itself.
<rev>~<n>
A suffix ~<n> to a revision parameter means the commit object that is the <n>th generation ancestor of the named commit object, following only the first parents.
简单理解就是,当n等于1时或者省略时,HEAD^和HEAD~都表示是HEAD版本的父版本或上一版本;但是当n等于2时,表示的意义就有差异了。HEAD^2表示是当前版本的第二个父版本(用于分支合并时),而HEAD~2表示当前版本的上两个版本,即父版本的父版本。
因此,上面命令中的rev2可以替换为HEAD^或HEAD~,即完整命令为:
git diff HEAD^ 或 git diff HEAD~
【注】此处同样是working tree,因此,此命令的使用限制和上一个命令一致。
【注】关于<rev>^和<rev>~更详细的解释请参看git manual: https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
git diff HEAD HEAD~ 比较当前版本和上一个版本的差异
或 git diff HEAD~1 HEAD~2 比较上一版本和上上个版本的差异
注:
由于我们使用git管理代码的规模较小,一般不会出现多继承的现象。即对于<rev>^<n>的使用场景较小
git diff rev1 rev2
git中的版本号
其中git的版本并不是一个类似于svn的数字编号,git中的版本号一般为特定的commit的id,如:# git log
commit f22369978d8e054b8f032f36783a00a8476196a6
<----这里的f22369978d8e054b8f032f36783a00a8476196a6就是一个版本
Author:XXX <XXXX@gmail.com>
Date: Sun Jun 9 10:17:14 2013 +0800
git中的特殊符合HEAD
我们知道,在git中HEAD是指向当前分支的,或者当前分支的最后一个版本。如man手册中git对于HEAD符号的定义是:"indicates the head of the current branch."。那么如果我们需要比较当前版本和上一个版本的差异,上面命令中的rev1就可以使用HEAD替代:
git diff HEAD rev2
简写版本
通过查看git diff的help说明,我们发现git diff有如下几种模式:git diff [options] [<commit>] [--] [<path>...]
git diff [options] --cached [<commit>] [--] [<path>...]
git diff [options] <commit> <commit> [--] [<path>...]
git diff [options] [--no-index] [--] <path> <path>
其中,注意形式1和形式3,不同的是形式3有两个<commit>部分,而形式1只有一个<commit>部分,其说明如下:
This form is to view the changes you have in your working tree relative to the named <commit>.
因此,上面命令中的HEAD可以省去。
git diff rev2
【注】此处请注意是working tree,因此,如果要比较版本库中的最后一次版本和上一版本的差异,使用此命令的限制必须是working tree和版本库中保持一致,即使用git st查看没有任何改动。
超级简写版本
此处引入两个后缀符号:^和~,结合刚才的HEAD,即HEAD^和HEAD~。他们的说明如下:<rev>^<n>
A suffix ^ to a revision parameter means the first parent of that commit object.
^<n> means the <n>th parent, (i.e. <rev>^ is equivalent to
<rev>^1). As a special rule, <rev>^0 means the commit itself.
<rev>~<n>
A suffix ~<n> to a revision parameter means the commit object that is the <n>th generation ancestor of the named commit object, following only the first parents.
简单理解就是,当n等于1时或者省略时,HEAD^和HEAD~都表示是HEAD版本的父版本或上一版本;但是当n等于2时,表示的意义就有差异了。HEAD^2表示是当前版本的第二个父版本(用于分支合并时),而HEAD~2表示当前版本的上两个版本,即父版本的父版本。
因此,上面命令中的rev2可以替换为HEAD^或HEAD~,即完整命令为:
git diff HEAD^ 或 git diff HEAD~
【注】此处同样是working tree,因此,此命令的使用限制和上一个命令一致。
【注】关于<rev>^和<rev>~更详细的解释请参看git manual: https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
最省事放心版本
结合HEAD和HEAD^的说明,如果我们需要比较两个版本的差异,即可使用如下命令:git diff HEAD HEAD~ 比较当前版本和上一个版本的差异
或 git diff HEAD~1 HEAD~2 比较上一版本和上上个版本的差异
注:
由于我们使用git管理代码的规模较小,一般不会出现多继承的现象。即对于<rev>^<n>的使用场景较小
相关文章推荐
- git提取出两个版本之间的差异文件并打包
- git diff 比较两个版本的差异
- git日志输出格式及两个版本之间差异列表
- 使用svn diff的-r参数的来比较任意两个版本的差异
- SVN导出两个版本之间的差异文件
- 通达OA 2013版和2013增强版两个版本开发的一些差异
- 通达OA 2013版和2013增强版两个版本开发的一些差异
- Git diff 比较两个版本的差异
- EasyUI window显示异常 (版本差异)
- git提取出两个版本之间的差异文件并打包
- 使用svn diff的-r参数的来比较任意两个版本的差异
- git提取出两个版本之间的差异文件并打包
- 使用svn diff的-r参数的来比较任意两个版本的差异
- 安装两个jdk java -version总是显示第一个安装的版本
- 使用svn diff的-r参数的来比较任意两个版本的差异
- git diff 比较两个版本的差异
- git提取出两个版本之间的差异文件并打包
- 使用svn diff的-r参数的来比较任意两个版本的差异
- win10系统上安装了两个版本的jdk1.7 1.8,先安装的1.8,后安装的1.7,重新配置环境变量后,还是显示1.8的解决方法3
- SVN简单获取两个版本的差异,不小心签错东西的朋友有福了>_<