1. ホーム
  2. git

[解決済み] Git は、省略形のコミット ID が 2 つの異なるコミットを参照する場合に警告を発しますか?

2022-07-05 07:30:41

質問

もし cee157 のように、2 つの異なるコミット ID を参照することができます。

cee157eb799af829a9a0c42c0915f55cd29818d4cee1577fecf6fc5369a80bd6e926ac5f864a754b

を入力すると、Git は警告を発します。 git log cee157 ? (あるいはGit 1.8.5.2 (Apple Git-48)で git log cee1 ).

私はそうすべきだと思いますが、そうなるという権威あるソースは見当たりません。

どのように解決するのですか?

このように表示されるはずです。

$ git log cee157
error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.
fatal: ambiguous argument 'cee157': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

実際の Git リポジトリで、このように接頭辞が重複しているコミットを見つけてテストしてみました。

git rev-list master | cut -c-4 | sort | uniq -c | sort -nr | head

これは、リビジョンのリストを master にあるリビジョンのリストを取り、最初の4文字をカットして残りを捨て、重複をカウントし、数値でソートします。私の比較的小さなリポジトリ(約1500コミット)で、共通の4桁の接頭辞を持つリビジョンがかなり見つかりました。4 桁のプレフィックスを選んだのは、Git がサポートする最も短い法定長のようだからです。(3桁以下では、たとえ曖昧でないとしてもうまくいきません)。

これはタイプミスではなく、重複するSHA1の数に関係なく、曖昧なSHA1に関するエラーメッセージが2回表示される理由がわかりません(2、3で試してみました)。

error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.

(ともに stderr . 実際には、出力全体が stderr にあり、何も stdout .)

Windowsでテストしました。

$ git --version
git version 1.8.1.msysgit.1

バージョンが >= 1.8.1 ならば、Git は安全だと思います。 が重複を警告します。(もっと古いバージョンでもこのように動作していたと思われます。

アップデイト

これをテストする場合、最低でも4桁のSHA1が必要で、その理由は int minimum_abbrev = 4 環境.c . (ありがとうございます デブナル の指摘に感謝します!)