gpt4 book ai didi

git - 什么是 Git 修订表达式?

转载 作者:行者123 更新时间:2023-12-02 13:45:53 26 4
gpt4 key购买 nike

所以,我使用 Git GUI 来创建一个存储库。但是我无法在 Google、文档或其他任何地方找到“修订表达式”是什么的任何痕迹,并且需要创建新分支。

此外,这似乎在程序中的许多其他地方都使用过,所以我相信知道这一点很重要。

我确实在 StackOverflow 上找到了一个关于这个的问题,但那个人从来没有得到答案。

我只需要知道:什么是修订表达式?

最佳答案

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 和一个缩写的对象名称。

符号引用名称。例如。 master 通常表示 $GIT_DIR/refs/heads/master 引用的提交对象。如果你碰巧同时拥有 head/master 和 tags/master,你可以明确地说 head/master 来告诉 git 你的意思是哪一个。当有歧义时, a 通过在以下规则中取第一个匹配项来消除歧义:

如果 $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 操作前的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。 MERGE_HEAD 记录您在运行 git-merge 时 merge 到分支中的提交。

一个 ref 后跟后缀 @ 以及括在大括号对中的日期规范(例如 {yesterday}、{1 月 2 周 3 天 1 小时 1 秒前} 或 {1979-02-26 18:30:00})到在先前的时间点指定 ref 的值。此后缀只能紧跟在引用名称之后使用,并且引用必须具有现有日志 ($GIT_DIR/logs/)。请注意,这会在给定时间查找本地 ref 的状态;例如,上周在您本地的主分支中有什么。如果您想查看在特定时间进行的提交,请参阅 --since 和 --until。

一个 ref 后跟后缀 @ 用括号对括起来的序数规范(例如 {1}, {15})来指定该 ref 的第 n 个先验值。例如 master@{1} 是 master 的直接优先值,而 master@{5} 是 master 的第 5 个优先值。此后缀只能紧跟在引用名称之后使用,并且引用必须具有现有日志 ($GIT_DIR/logs/)。

您可以使用带有空引用部分的 @ 构造来获取当前分支的引用日志。例如,如果您在分支 blabla 上,那么@{1} 的含义与 blabla@{1} 相同。

特殊结构@{-} 表示在当前分支之前 checkout 的第 th 个分支。

修订版参数的后缀 ^ 表示该提交对象的第一个父级。 ^ 表示第一个父级(即 rev^ 相当于 rev^1)。作为特殊规则,rev^0 表示提交本身,当 rev 是引用提交对象的标记对象的对象名称时使用。

修订参数的后缀 ~ 表示提交对象是命名提交对象的第 th 代祖父,仅在第一个父之后。 IE。 rev~3 相当于 rev^^^ 相当于 rev^1^1^1。有关此表格用法的说明,请参见下文。

后缀 ^ 后跟括在大括号对中的对象类型名称(例如 v0.99.8^{commit})表示该对象可能是一个标签,并递归取消引用该标签,直到找到该类型的对象或无法取消引用该对象不再(在这种情况下,barf)。前面介绍的 rev^0 是 rev^{commit} 的简写。

后缀 ^ 后跟空大括号对(例如 v0.99.8^{})表示该对象可能是一个标签,并递归地取消引用该标签,直到找到一个非标签对象。

冒号,后跟斜杠,后跟文本:这会命名提交消息以指定文本开头的提交。此名称返回可从任何引用访问的最年轻的匹配提交。如果提交消息以 ! 开头,则必须重复;特殊序列 :/! 后跟除了 !暂时保留。

后缀 : 后跟路径;这会在由冒号前的部分命名的树形对象中的给定路径上命名 blob 或树。

一个冒号,可选后跟一个阶段号(0 到 3)和一个冒号,后跟一个路径;这在给定路径的索引中命名了一个 blob 对象。缺少阶段编号(以及它后面的冒号)将命名为阶段 0 条目。在 merge 期间,阶段 1 是共同的祖先,阶段 2 是目标分支的版本(通常是当前分支),阶段 3 是正在 merge 的分支的版本。

这是 Jon Loeliger 的插图。提交节点 B 和 C 都是提交节点 A 的父节点。父提交按从左到右的顺序排列。
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

关于git - 什么是 Git 修订表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com