有没有办法从指定的blob对象(哈希)获取以前的原始文件。
换句话说,当文件的blob哈希从fd871b5
更改为6732f18
时,我希望获得fd871b5
的内容。
但不幸的是,fd871b5
不公开,所以我尝试使用插入更改的blob哈希值来使用插入符号^
。
根据下面的输出,插入符^
不能对blob对象起作用。
有什么想法吗?
$ git show -- README.md
commit 9f38e2d9e6ca81341fecf82d881cf629effb4be2
-- snip --
diff --git a/README.md b/README.md
index fd871b5..6732f18 100644
-- snip --
$ git show 6732f18^
error: object 6732f18f21f8b4b7ffe0c015803d7cd09c597337 is a blob, not a commit
error: object 6732f18f21f8b4b7ffe0c015803d7cd09c597337 is a blob, not a commit
fatal: ambiguous argument '6732f18^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
用例详细信息:
在某些OSS项目中,发布的补丁有一个不公开的blob对象,也没有commit-id。
如果pre-blob
和commit-id
不公开,并且仅post-blob
可用,我想检索与<pre-blob>
对应的完全相同的文件。
答案 0 :(得分:3)
只有承诺才有父母。在提交的父级中解决该路径上的内容:
git rev-parse 9f38e2d9e6ca81341fecf82d881cf629effb4be2^:README.md
显示其ID,
git show 9f38e2d9e6ca81341fecf82d881cf629effb4be2^:README.md
显示其内容。
答案 1 :(得分:1)
如果您知道感兴趣的blob的散列并且blob仍然存在于repo中(即它可能是一个悬空物体,但它还没有被垃圾收集),请使用
git cat-file -p <hash>
为了解决问题,这里有一个例子:
$ mkdir test && cd test
$ git init
Initialized empty Git repository in /Users/jubobs/Desktop/test-git/.git/
$ echo foo > README
$ git add README
$ git commit -m "Write 'foo' to README"
[master (root-commit) 73ece26] Write 'foo' to README
1 file changed, 1 insertion(+)
create mode 100644 README
$ echo bar >> README
$ git add README
$ git commit -m "Append 'bar' to README"
[master 7ac5ae9] Append 'bar' to README
1 file changed, 1 insertion(+)
test-git(master)$ git show -- README
commit 7ac5ae95b49c7e493119f46fb8150c437a200df3 (HEAD -> master)
Author: Jubobs <xxxxxxxx>
Date: Sun Jun 11 01:04:22 2017 +0100
Append 'bar' to README
diff --git a/README b/README
index 257cc56..3bd1f0e 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
foo
+bar
$ git cat-file -p 257cc56
foo
$ git cat-file -p 3bd1f0e
foo
bar