ブランチから最新のGitコミットハッシュを取得するコマンド[クローズ]


84

特定のGitブランチの最新のコミットハッシュをコマンドラインで確認するにはどうすればよいですか?


1
その特定のブランチをチェックアウトしたときに、「git log -n1」を使用してみましたか?
Rick van Bodegraven 2013年

gitログはローカルリポジトリにハッシュを提供しますが、gitハブリポジトリには新しいハッシュがあります。
mbdvg 2013年

1
git log -n 1 [branch_name]branch_name(リモートブランチまたはローカルブランチの場合があります)はオプションです。branch_nameがないと、現在のブランチの最新のコミットが表示されます。
Rahul Tapali 2013年

11
このように投票を締めくくると、SOはウィキペディアになりつつあります。
エリックウォーカー

回答:


60

を使用しgit ls-remote git://github.com/<user>/<project>.gitます。たとえば、私のtrac-backlogプロジェクトは次のようになります。

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git
5d6a3c973c254378738bdbc85d72f14aefa316a0    HEAD
4652257768acef90b9af560295b02d0ac6e7702c    refs/heads/0.1.x
35af07bc99c7527b84e11a8632bfb396823326f3    refs/heads/0.2.x
5d6a3c973c254378738bdbc85d72f14aefa316a0    refs/heads/master
520dcebff52506682d6822ade0188d4622eb41d1    refs/pull/11/head
6b2c1ed650a7ff693ecd8ab1cb5c124ba32866a2    refs/pull/11/merge
51088b60d66b68a565080eb56dbbc5f8c97c1400    refs/pull/12/head
127c468826c0c77e26a5da4d40ae3a61e00c0726    refs/pull/12/merge
2401b5537224fe4176f2a134ee93005a6263cf24    refs/pull/15/head
8aa9aedc0e3a0d43ddfeaf0b971d0ae3a23d57b3    refs/pull/15/merge
d96aed93c94f97d328fc57588e61a7ec52a05c69    refs/pull/7/head
f7c1e8dabdbeca9f9060de24da4560abc76e77cd    refs/pull/7/merge
aa8a935f084a6e1c66aa939b47b9a5567c4e25f5    refs/pull/8/head
cd258b82cc499d84165ea8d7a23faa46f0f2f125    refs/pull/8/merge
c10a73a8b0c1809fcb3a1f49bdc1a6487927483d    refs/tags/0.1.0
a39dad9a1268f7df256ba78f1166308563544af1    refs/tags/0.2.0
2d559cf785816afd69c3cb768413c4f6ca574708    refs/tags/0.2.1
434170523d5f8aad05dc5cf86c2a326908cf3f57    refs/tags/0.2.2
d2dfe40cb78ddc66e6865dcd2e76d6bc2291d44c    refs/tags/0.3.0
9db35263a15dcdfbc19ed0a1f7a9e29a40507070    refs/tags/0.3.0^{}

必要なものをgrepして切り取ります。

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git | \
   grep refs/heads/master | cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

または、コマンドラインで必要な参照を指定し、次のコマンドでgrepを回避できます。

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git refs/heads/master | \
   cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

注:git://URLである必要はありません。それはhttps://またはgit@github.com:、あまりにも。

もともと、これはリモートブランチの最新のコミットを見つけることを目的としていました(最後のフェッチからだけでなく、リモートリポジトリのブランチでの実際の最新のコミット)。ローカルで何かのコミットハッシュが必要な場合、最良の答えは次のとおりです。

git rev-parse branch-name

それは速くて簡単で、単一のコマンドです。現在のブランチのコミットハッシュが必要な場合は、HEADを確認できます。

git rev-parse HEAD

4
もっと愛に値する。これは美しく機能します。
SuperFamousGuy 2013年

git rev-parse my_branch_nameまたはgit log -n 1 my_branch_name | grep commit | awk '{ print $2 }'より簡単な答え; 意志の出力はわずかのハッシュ最後のコミットmy_branch_name
betoharres

@betoharres OPは元々、リモートリポジトリでのコミットを決定しようとしていました(私たちが持っているものでrefs/remotesはなく、実際のリモートリポジトリ)。 git rev-parse branch-name間違いなく地元の支店に行く方法です。
JohnSzakmeister19年

これはのみの分野で働くgit svnためgit svn fetchの変更git log出力となるようgit log、もはや最後に取得するために使用することができるリモートgitリポジトリをハッシュをコミットします。
アンドリー

@Andryどういう意味かわかりません...あなたのコメントをフォローするのに問題があります。もっと説明してもらえますか?
JohnSzakmeister19年

139
git log -n 1 [branch_name]

branch_name(リモートブランチまたはローカルブランチの場合があります)はオプションです。がないbranch_name場合、現在のブランチの最新のコミットが表示されます。

例えば:

git log -n 1
git log -n 1 origin/master
git log -n 1 some_local_branch

git log -n 1 --pretty=format:"%H"  #To get only hash value of commit

20
git log -n 1 --pretty = format: "%H"は私にとって完璧に機能します
Jaro

9
短いハッシュを取得します: 'git rev-parse --short --verify my_branch' from同様の質問:stackoverflow.com/a/949391/134761
anglesen 2015年

いいですね、これを.gitconfigに追加して、最後のコミットをgit hash | pbcopy clip `` `[alias] hash ="!f(){\ git log -n 1 --pretty = format: "%H";でコピーできるようにしました。 \}; f "` ``
パンツ

2

を実行したgit log -n 1後に使用してみてくださいgit checkout branchname。これは、最新のコミットのコミットハッシュ、作成者、日付、およびコミットメッセージを表示します。

git pull origin/branchname最初に実行して、ローカルリポジトリがアップストリームと一致することを確認します。

ローカルブランチがリモートブランチで遅れているコミットのリストのみを表示したい場合は、次のようにします。

git fetch origin
git cherry localbranch remotebranch

これにより、ローカルブランチにまだマージされていないコミットのすべてのハッシュが一覧表示されます。


私の要件は、ローカルリポジトリとgithubリポジトリのコミットハッシュが同じかどうかを確認することです。これを行うにはどうすればよいですか?
mbdvg 2013年

私の知る限り、同じコミットのローカルリポジトリとリモートリポジトリの間でコミットハッシュが異なる可能性はありません。ローカルリポジトリとリモートリポジトリで欠落しているコミットのリストを意味しているのでしょうか。
Rick van Bodegraven 2013年

はい、Rick van、不一致があるので、ローカルリポジトリとgithubリポジトリに違いがあることを示したいので、調べる方法が必要です
mbdvg 2013年

2

あなたができるgit fetch nameofremoterepo、そしてgit log

個人的には、にエイリアスgitloggit log --graph --oneline --pretty --decorate --allます。試してみて、自分に合っているかどうかを確認してください


そして、git fetchはまだ変更をプルしていません
nglinh 2013年

--onlineの省略形です--pretty=oneline --abbrev-commit。しかし、あなたも使用--prettyしています、それは元に戻ります--pretty=oneline...git log --graph --abbrev-commit --decorate --all代わりに私はお勧めします。
Felix Kling 2013年

涼しい。気づかなかった。ありがとう!
nglinh 2013年

0

あなたが書いたコメントで

ローカルリポジトリとgithubリポジトリに違いがあることを示したい

別の回答ですでに述べたように、git fetch origin最初に行う必要があります。次に、リモートが現在のブランチよりも進んでいる場合は、ローカルブランチとリモート間のすべてのコミットを次のように一覧表示できます。

git log master..origin/master --stat

ローカルブランチが先行している場合:

git log origin/master..master --stat

--stat 変更されたファイルのリストも表示されます。

追加と削除を明示的にリストする場合は、次を使用しますgit diff

git diff master origin/master

0

「gitlog-n 1 [branch_name]」オプションを使用する場合は注意してください。-nは1行のログのみを返しますが、これが返される順序は保証されません。以下はgit-logのmanページからの抜粋です

.....
.....
Commit Limiting

Besides specifying a range of commits that should be listed using the special notations explained in the     description, additional commit limiting may be applied.

Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted.

Note that these are applied before commit ordering and formatting options, such as --reverse.

-<number>
-n <number>
.....
.....
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.