怎么git rev-parse
办?
我已经阅读了手册页,但它提出的问题多于答案.像:
挑选和按摩参数
按摩?那是什么意思?
我用作修订说明符的解析器(对SHA1),比如
git rev-parse HEAD^
Run Code Online (Sandbox Code Playgroud)
要么
git rev-parse origin/master
Run Code Online (Sandbox Code Playgroud)
这是命令的目的吗?如果没有,使用它来实现这一点是否正确?
我现在对 git 有一些奇怪的行为。
我有一个标记了提交的代码库 v2.3.0
如果我运行git log
,我可以看到我最新的提交哈希是:
commit b2ee576083607b7ba451b72642a77ca3309e4ac9 (HEAD, tag: v2.3.0, origin/staging, origin/master, origin/develop, origin/HEAD, master)
Author: B <b@b.com>
Date: Thu Apr 1 16:53:48 2021 +0000
Run Code Online (Sandbox Code Playgroud)
凉爽的!这也与我在 git repo 中看到的一致
如果我运行git checkout v2.3.0
,我也会得到相同的提交哈希。甜的。
但是,如果我运行git rev-parse v2.3.0
,要查看哪个提交哈希与我的标签对齐,我会得到提交哈希85607530aa64da4df34e7160d073df5c2699439b
......?
如果我然后尝试检查该提交哈希,我的代码库仍然会说它在b2ee576083607b7ba451b72642a77ca3309e4ac9
(即它没有改变)
所以据我所知,我有这个奇怪的幻像提交哈希,它在我的 git 存储库中找不到,但它似乎指向我的实际提交哈希。这给我带来了问题,因为我有一个依赖于 git rev-parse 正确输出的脚本。
我有 git 版本 git version 2.25.1
有人知道这里发生了什么吗?
该:/
语法允许您使用正则表达式来匹配提交。例如,要为包含字符串“Add widget”的早期提交创建修复提交,您可以编写:
git commit --fixup ':/Add widget'
Run Code Online (Sandbox Code Playgroud)
有没有办法将诸如^
or 之类的修饰符应用于~
表达式:/
?我已经尝试过明显的语法......
git show ':/Add widget^'
Run Code Online (Sandbox Code Playgroud)
哪个不起作用:
fatal: ambiguous argument ':/widget^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
(git show ':/Add widget^' --
结果为fatal: bad revision ':/Add widget^'
)。
如何通过提交消息标题中的文本/单词来引用 git 提交?
我想避免:
git log
我已经阅读了 git-rev-parse 的手册页,但仍然不知道这个命令是做什么的。假设我有一个结构如下的 git 项目:
MyProject
??? Folder1
??? Folder2
??? .git
Run Code Online (Sandbox Code Playgroud)
如果我跑
git-rev-parse 头
然后我可以获得与我上次提交相同的 SHA_1。很简单。
但是,如果我跑
git-rev-parse 头:Folder1
然后我得到另一个 SHA_2,它与我曾经提交的任何 SHA 不同。我的问题是:这个“git-rev-parse HEAD:Folder1”是什么意思,这个SHA_2是什么?