此外,似乎在程序的许多其他位置也使用了这个术语,因此我认为了解它很重要。
我确实在StackOverflow上找到了一个关于此问题的帖子,但那个人从未得到答案。
我只需要知道:什么是“Revision Expression”?
git需要在许多常见操作中能够识别一个提交
https://git-scm.com/docs/git-rev-parse
有许多方法可以识别一个提交。你可以使用分支、标签、提交SHA1或表达式。例如:
git log HEAD
HEAD
最终会解析成一个特定的提交,您将获得该提交的日志。也可以这么说:
git log master
master
是一个分支,它也会解析到一个特定的提交版本。
git log fd72e9c99312
这确实是实际提交。
下面的文档是您正在寻找的内容。 这些来自于git-rev-parse
命令文档,在http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html。
指定修订版本
修订参数通常(但不一定)命名提交对象。它们使用所谓的扩展 SHA1 语法。以下是拼写对象名称的各种方法。列表末尾列出的是用于命名包含在提交中的树和 blob 的。
完整的 SHA1 对象名称(40 字节的十六进制字符串)或其唯一嵌入库中。例如,如果您的存储库中没有其他以 dae86e 开头的对象,则 dae86e1950b1277e545cee180551750029cfe735 和 dae86e 名称相同的提交对象。
从 git-describe 输出;即最接近的标记,后跟一个破折号和一定数量的提交,后跟一个破折号、g 和缩写的对象名称。
符号 ref 名称。例如,master 通常表示 $GIT_DIR/refs/heads/master 引用的提交对象。如果您同时拥有 heads/master 和 tags/master,则可以明确地说 heads/master,以告诉 git 您要使用哪一个。不明确时,通过以下规则的第一个匹配来消除歧义:
如果 $GIT_DIR/ 存在,则是您的意思(这通常仅对 HEAD、FETCH_HEAD、ORIG_HEAD 和 MERGE_HEAD 有用);
否则,$GIT_DIR/refs/ 如果存在;
否则,$GIT_DIR/refs/tags/ 如果存在;
否则,$GIT_DIR/refs/heads/ 如果存在;
否则,$GIT_DIR/refs/remotes/ 如果存在;
否则,$GIT_DIR/refs/remotes//HEAD 如果存在。
HEAD 表示工作树中更改基于的提交。FETCH_HEAD 记录了您最后一次 git-fetch 调用时从远程存储库获取的分支。 ORIG_HEAD 是由移动 HEAD 的命令创建的,以记录他们操作之前 HEAD 的位置,以便您可以轻松地将分支的顶部变回运行它们之前的状态。 当您运行 git-merge 时,MERGE_HEAD 记录您正在合并到分支中的提交。
一个 ref,后跟 @,并在花括号中括住日期规范(例如 {yesterday}、{1 month 2 weeks 3 days 1 hour 1 second ago} 或 {1979-02-26 18:30:00}),以指定先前某个时间点上 ref 的值。此后缀仅可立即跟在 ref 名称后面,并且该 ref 必须具有现有的日志($GIT_DIR/logs/)。请注意,这会查找您本地 ref 在给定时间的状态;例如,上周您的本地 master 分支中的内容。如果要查看在某些时间内进行的提交,请参见 --since 和 --until。
一个 ref,后跟 @ 后缀,后跟包含在花括号中的序数规范(例如 {1}、{15})以指定该 ref 的第 n 个先前值。例如,master@{1} 是 master 的最近前一个值,而 master@{5} 是 master 的第五个先前值。此后缀仅可立即跟在 ref 名称后面,并且该 ref 必须具有现有的日志($GIT_DIR/logs/)。G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = A^2 = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2
man gitrevisions
(https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html)直接访问“指定修订版本”文档。 - Max Nanasygit revision expression
。在 git 文档中,我没有看到 revision expression
这个术语。也没有在提供的链接中找到相关内容。 - Marinos Angahooa给出了全面的答案。一般情况如下:
master
)gitk
或git log
中捕获欢迎来到美妙的Git世界。太多信息是家常便饭...
Ctrl-x v l
即可列出所有修订版本。对于一个Git新手(但不是Emacs/CVS的新手),我很惊讶地看到修订版本被列为:commit 8d5ab12cd76d5e6098e5894c8713ec605fd9f153
这绝对是一种令人耳目一新的变化,不再使用“Major.minor.bugfix.build”表示法。
更令人惊喜的是,Emacs可以自动处理git,而无需我告诉它(通过.emacs文件)需要引用git而不是CVS。非常神奇。
因此,总结一下,当Emacs提示输入修订版本时,只需输入那个40位十六进制数字即可。
当您首次尝试创建分支时,Git GUI会要求您提供修订表达式。据我理解,Git需要已经创建并提交的分支才能跟踪新制作的更改(例如新分支/文件修改),以便与某些东西进行比较(这里是主分支)。
Revision Expression
时,Git GUI
是什么意思?” - Marinos An