假设我有这段历史:
...
* c1
...
* cr: git revert c1
...
鉴于cr
的提交哈希,是否有一种编程方法来检索c1
的提交哈希值?它不需要是瓷器,管道也很好。
答案 0 :(得分:3)
如评论中所述,这依赖于正常的恢复日志消息,但其他方面很容易:
git log -1 --format=%B $revspec | \
perl -n -e '/^This reverts commit ([0-9a-f]+)/ && print $1 '
(其中$revspec
是您打算为恢复提交命名的方式,无论是原始SHA-1,还是master~5
等等。
(如果提交消息中缺少ID,您将不会输出。在这种情况下,或者如果ID存在但不正确,您几乎是SOL。)
答案 1 :(得分:1)
是。默认还原日志消息包含原始ID。您可以解析git log
来查找它。 @torek has already covered this
如果您没有使用默认的还原消息怎么办?你是SOL。为什么?其他地方Git doesn't store the revert information。而且您无法获得原始提交ID。
提交ID是cryptographic checksum,意味着它包含无信息关于它的校验和。您无法从校验和中提取有关提交的信息。
您是否可以使用前一次提交的diff来重新生成原始提交消息?再一次,没有。首先,它不能保证差异是相同的,例如可能存在冲突或者差异的碎片可能已经移动。更重要的是,the commit ID is a checksum of more than just the content包括文件内容,日志消息,日期等内容。您还需要了解所有这些以生成原始提交ID。
你撤消事情的最后避难所是git reflog
,但这对你也没有帮助。它将记录存在恢复的事实,但该消息将是您的提交消息的第一行。它不包含原始提交ID。
有希望,但它不是程序化的。获取还原的差异,找到一个重要的更改行,删除+
或-
。现在运行git log -S'...yourline'
以查找更改该行的提交。
例如,我们说我有......
commit 2c257ccae4c124e7cff6cfa7ca069250fb33907f (HEAD -> master)
Author: Michael G. Schwern <schwern@pobox.com>
Date: Thu Oct 8 20:19:26 2015 -0700
dlfjalkdjflkadj
diff --git a/Build.PL b/Build.PL
index 8c87db4..bed5170 100644
--- a/Build.PL
+++ b/Build.PL
@@ -73,10 +73,6 @@ my $builder = MyBuild->new(
# so some CPAN shells won't see it.
"Module::Build" => '0.36',
},
- recommends => {
- # Significant performance improvements
- autodie => '2.26',
- },
meta_merge => {
resources => {
然后我可以运行git log -S'Significant performance improvements'
并获取:
commit 2c257ccae4c124e7cff6cfa7ca069250fb33907f (HEAD -> master)
Author: Michael G. Schwern <schwern@pobox.com>
Date: Thu Oct 8 20:19:26 2015 -0700
dlfjalkdjflkadj
commit ac43bedc8c70fb851c7a594cace18d5fbad135ac
Author: Michael G. Schwern <schwern@pobox.com>
Date: Wed Dec 31 14:46:05 2014 -0800
Recommend the latest autodie which has significant performance improvements.
It's loads much faster and uses much less memory and has significant bug fixes.
None of this is required by perl5i, so I left the required version at what
Debian stable is using.
In the future this can be bumped to a requirement.
For #284