Git で現在のコミットのハッシュを取得するにはどうすればよいですか?
-
09-09-2019 - |
質問
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 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
コミットハッシュを使用してうまくいった手順は次のとおりです。
- たとえば、GIT HUB リンクにログオンします。
https://github.<xyz.abc>.com
ログインしたら、「検索またはジャンプ...」テキストボックスに次のように入力します。
hash:<GIT COMMIT HASH>
必要に応じて、「すべての GitHub エンタープライズ」または「この組織内」を選択します。
- Enter キーを押します。