Git で現在のコミットのハッシュを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/949314

質問

Git 変更セットを TFS に保存されている作業項目にリンクする機能を (今のところ) 維持したいと考えています。

私はすでに、Git チェンジセットのメッセージに作業項目識別子を挿入できるツール (Git のフックを使用) を作成しました。

ただし、Git コミットの識別子 (ハッシュ) もカスタム TFS 作業項目フィールドに保存したいと考えています。このようにして、TFS 内の作業項目を調べて、どの Git 変更セットがその作業項目に関連付けられているかを確認できます。

Git から現在のコミットからハッシュを簡単に取得するにはどうすればよいですか?

役に立ちましたか?

解決

任意の拡張オブジェクト参照を SHA-1 に変換するには、単に次のように使用します。 git-rev-parse, 、 例えば

git rev-parse HEAD

または

git rev-parse --verify HEAD

サイドノート: 向きを変えたい場合は 参考文献 ( そして タグ) SHA-1 には、 git show-ref そして git for-each-ref.

他のヒント

あなただけの短縮ハッシュをしたい場合:

git log --pretty=format:'%h' -n 1

また、%のHを使用して、長いハッシュを取得するための別の方法である。

もう一つ、gitのログを使用します:

git log -1 --format="%H"

これはちょっと短いけれども@outofcultureのに非常によく似ています。

フルSHAを取得するには:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

短縮バージョンを取得するには:

$ git rev-parse --short HEAD
cbf1b9a

完全のために、誰が、まだそれを示唆していないからです。 .git/refs/heads/masterは一つだけの行を含むファイルです:最新のハッシュはmasterにコミットします。だから、そこからそれを読むことができます。

コマンドのように

あるいは、

cat .git/refs/heads/master
<時間>

アップデートます:

そのGitは今パック-refのファイルではなく、/レフリー/ヘッド/フォルダ内のファイルなど、いくつかの頭、参考文献を保存するサポートしています。 https://www.kernel.org/pub/software/scm/ gitの/ docsに/のgit-パック-refs.htmlする

いつもそこにもgit describeています。デフォルトでは、それはあなたを与える -

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75

コミットハッシュ

git show -s --format=%H

短縮コミットハッシュ

git show -s --format=%h

よりgit show例はこちらのをクリックします。

使用git rev-list --max-count=1 HEAD

スクリプト中に変数にハッシュを格納する必要がある場合は、使用することができます。

last_commit=$(git rev-parse HEAD)

それとも、あなただけの最初の10文字にしたい場合(github.comがないように)。

last_commit=$(git rev-parse HEAD | cut -c1-10) 

最も簡潔な方法は、私が知ってます:

git show --pretty=%h 

あなたが追加することができ、ハッシュの桁の固有の番号が必要な場合:

--abbrev=n
あなたはすべての気の利いた内容を覚えておく必要はありませんので、

おそらくあなたは、エイリアスをしたいです。以下のいずれかの手順を行った後、あなたは単に入力することができるようになります。

$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630

受け入れ答えの上に続き、ここでこれを設定するには2つの方法があります:

1)グローバル設定(私の元の答え)を編集してgitのに明示的な方法を教えます:

 # open the git config editor
 $ git config --global --edit
 # in the alias section, add
 ...
 [alias]
   lastcommit = rev-parse HEAD
 ...

2)それとも、最近エイドリアンによってコメントとして、gitの、ショートカットを教えるためにショートカットを好きなら:

$ git config --global alias.lastcommit "rev-parse HEAD"
ここからは、最後のコミットハッシュを表示するためにgit lastcommitを使用し、

あなたがそれを行うには、スーパーハック方法をしたい場合:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

基本的には、Gitの格納形式ref: {path from .git}で.git / HEADヘッドの位置、。このコマンドは、「REF:」オフ、スライスをそれを読み出す。、それが指さどんなファイル読み出し

HEAD「はREF:...」ではありませんので、これは、もちろん、取り外したヘッドモードで失敗しますが、ハッシュ自体 - しかし、あなたが知っている、私はあなたがそれだけの知性を期待していないと思いますあなたのbashのワンライナー。あなたはセミコロンが浮気しているとは思わない場合は、しかし...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

私は、もう少し別の何かが必要:コミットのフルSHA1を表示するが、作業ディレクトリがクリーンでない場合は最後にアスタリスクを追加します。私は複数のコマンドを使用していた場合を除き、以前の回答の作業のオプションなしています。

ここではない1つのライナーは、次のとおりです。
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
結果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

説明:だけ「NOTタグ」を含むタグと、現在のコミット(注釈付きのタグを使用して)説明しています。タグはスペースを持つことができないので、これはタグに一致することはありませんし、我々は結果--alwaysを表示するために、コマンドはコミットのフル(--abbrev=0)SHA1を表示するフォールバックと作業ディレクトリが--dirtyであれば、それは、アスタリスクを追加します。

アスタリスクを追加したくない場合は、

が、これは以前の回答にある他のすべてのコマンドのように動作します。
git describe --always --abbrev=0 --match "NOT A TAG"
結果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe

git show-ref --head --hash head
あなたはスピードのために行っている場合は、

は、しかし、に言及アプローチをhref="https://stackoverflow.com/a/12913817/72321">

cat .git/refs/heads/<branch-name>

これまでにここに記載されている他の方法よりもかなり高速です。

ここでワンライナーは、gitのファイルから直接読み取りを使用してバッシュシェルである。

(head=($(<.git/HEAD)); cat .git/${head[1]})

あなたはGitのルートフォルダに上記のコマンドを実行する必要があります。

あなたは、リポジトリのファイルをした場合は、この方法は便利ですが、gitコマンドがインストールされていないされています。

動作しない場合は、

、あなたが現在持っているヘッドの種類.git/refs/headsフォルダにチェックします。

ファイルにあなたのホームディレクトリにある「.gitconfig」

以下を追加します
[alias]
sha = rev-parse HEAD

あなたが覚えやすいコマンドを持つことになります:

$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600

ここでは、別のダイレクト・アクセスの実装です。

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

これはまた、(:公共のウェブサイトのためにそれを.gitディレクトリアクセス可能を行うことを推奨していない私が知っている):ローカルパッケージアーカイブのために有用であるHTTPを介して動作します。

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done

ここでそれを行うための別の方法は次のとおりです。)

git log | grep -o '\w\{8,\}' | head -n 1

コミットハッシュを使用してうまくいった手順は次のとおりです。

  1. たとえば、GIT HUB リンクにログオンします。 https://github.<xyz.abc>.com
  2. ログインしたら、「検索またはジャンプ...」テキストボックスに次のように入力します。

    hash:<GIT COMMIT HASH>
    
  3. 必要に応じて、「すべての GitHub エンタープライズ」または「この組織内」を選択します。

  4. Enter キーを押します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top