git rev-parseは何をしますか?


282

何をしgit rev-parseますか?

manページを読みましたが、回答よりも多くの質問が出されました。のようなもの:

パラメータを選択してマッサージする

マッサージ?どういう意味ですか?

私は、リビジョン指定子のリゾルバーとして(SHA1へ)使用しています。

git rev-parse HEAD^

または

git rev-parse origin/master

これはコマンドの目的ですか?そうでない場合、それを使用してこれを達成することは正しいですか?


3
manページで確認できる限り、他のコマンドのリビジョン/オブジェクト名を解析するためのほとんどの内部ユーティリティです。あなたがやっていることは、ほとんどrev-parseコマンドの目的です。これを使用してコマンドラインを正規化することもできるため、実際のプログラムはGitの複雑なオブジェクト名構文を理解する必要がありません(git rev-parseコマンドラインの特定のパラメーターを変更または「マッサージ」するために使用する前に、実際のプログラムが呼び出されます)。


60
のマニュアルページgit rev-parseは笑えるほど理解できません。5年経った今でも、その専門用語を人間が読める形式に書き換えようとする人がいないことに驚いています。
not2qubit 2018年

@ not2qubit Me:「説明してくれてありがとう、私は劣っていました。」ライナス・トーヴァルズ:「もう一度読んだ。正確にあなたが理解しなかった部分は?」
Brain2000

回答:


245

git rev-parseplumbing主に操作に使用される補助コマンドです。

の一般的な使用法の1つgit rev-parseは、リビジョン指定子を指定してSHA1ハッシュを出力することです。さらに、この出力をフォーマットするためのさまざまなオプションがあります。たとえば--short、より短い一意のSHA1を印刷するためです。

私が使用した他のユースケースも(gitの上に構築されたスクリプトや他のツールで)あります:

  • --verify 指定されたオブジェクトが有効なgitオブジェクトであることを確認します。
  • --git-dir.gitディレクトリのabs /相対パスを表示します。
  • を使用して現在リポジトリ--is-inside-git-dir内にいるか、または使用して作業ツリー内にいるかを確認する--is-inside-work-tree
  • リポジトリが最小限の使用であるかどうかの確認 --is-bare-repository
  • ブランチのSHA1ハッシュの印刷(--branches)、タグ(--tags)、参照もリモートに基づいてフィルタリングできます(を使用--remote
  • --parse-optスクリプトの引数を正規化し(のようなものgetopt)、以下で使用できる出力文字列を出力します。eval

Massage情報をある形式から別の形式、つまり変換コマンドに変換できることを意味します。これらは私が考えることができるいくつかの簡単な例です:

  • ブランチまたはタグ名が指すコミットのSHA1へのブランチ。タグは、コミットのSHA1値のみを受け入れる配管コマンドに渡すことができます。
  • リビジョン範囲A..Bのためgit logか、git diffなどの基本的な配管コマンドの引数と同等にB ^A

102

コマンド名の語源を詳しく説明するためにrev-parse、Gitはrev「リビジョン」の略であり、一般的にはコミットの40文字のSHA1ハッシュを意味する、配管コマンドの用語を一貫して使用しています。rev-listたとえば、このコマンドはブランチなどの40文字のコミットハッシュのリストを出力します。

この場合、名前はに拡張される場合がありますparse-a-commitish-to-a-full-SHA1-hash。コマンドにはTuxdudeの回答で言及されているいくつかの補助的な関数がありますが、その同名は、ブランチ名や短縮ハッシュなどのユーザーフレンドリーな参照を、多くのプログラミング/配管に最も役立つ明確な40文字のSHA1ハッシュに変換するユースケースのようです目的。

私がそれを理解し、「マッサージ」と「操作」という用語を理解するのに同じ問題を抱える前に、それがかなり「逆解析」であると私が思っていたのを知っています:)

とにかく、この「改訂からパース」の概念は、それを考えるのに満足のいく方法であり、そのようなものが必要なときにこのコマンドを思い付くための信頼できる概念です。Gitのスクリプト作成では、ユーザーフレンドリーなコミット参照をユーザー入力として頻繁に受け取り、一般的には、受け取った直後に検証済みの明確な作業参照に解決する必要があります。それ以外の場合、入力の変換と検証は、スクリプトを通じて増殖する傾向があります。


9
説明をありがとう、私はgit-docsを少し理解できませんでした:git-scm.com/docs/git-rev-parse
Jacob McKay

あなたは私たちの例を与えることができますmessagingし、manipulationあなたが前にほのめかすよう?
Bo Chen

5
つまり、git rev-parseはの略ですgit revision-parse。与えられた入力を受け取り、対応する40文字のリビジョンIDを返します。
Jonathan Benn

36

git rev-parse次のように--abbrev-refフラグを使用して現在のブランチ名を取得することもできます。

git rev-parse --abbrev-ref HEAD

この方法でコミットメッセージを取得することは可能ですか?
Leo Droidcoder、

2
@LeoDroidcoder試してみるgit log --format=%B -n 1 <revision>
ヒッピーホップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.