gitのコミットの記法

git のコマンドでコミット(リビジョン)を指定する記法をまとめました。

一部記法の図解

図解Git と合わせてご覧いただくと良いかもしれません。

 

単一のコミットを指定する記法

git merge や git reset などで使用します。また、後述のコミットの範囲を指定する記法で使用します。

<rev>指定方法 意味
<sha1> dae86e おなじみ SHA-1 ハッシュ値。被った値がなければ先頭から数文字で良い。
<describeOutput> v1.7.4.2-679-g3bee7fb git discribe コマンドで出力される文字列。ヒューマンフレンドリーな文字列を使いたい場合に。
<refname> master, heads/master, refs/heads/master ブランチ名、タグ名など。
@ 現在のブランチ。
<refname>@{<date>} master@{yesterday}, HEAD@{5 minutes ago} <refname> が過去に指していた値。yesterday は24時間前を意味する。
<refname>@{<n>} master@{1}, @{1} <refname> が <n>個前に指していた値。<refname> を省略した場合は、現在のブランチを意味する。
@{-<n>} @{-1} <n>個前にチェックアウトしたブランチ/コミット
<branchname>@{upstream} master@{upstream}, @{u} デフォルトで pull するリモートブランチ。
<branchname>@{push} master@{push}, @{push} デフォルトで push するリモートブランチ
<rev>^<n> HEAD^, v1.5.1^0 <n>個目の親。省略した場合は1つ目を指し、0の場合は、親ではなく <rev> 自身を指す。
<rev>~<n> master~3 <n>世代前の祖先。複数の親がいる場合は、最初の親をたどる。
<rev>^{/<regexp>} HEAD^{/fix nasty bug} <rev>からたどれるコミット(<rev>またはその祖先)で、コミットメッセージが <regexp> にマッチする一番若いもの。

リビジョンの範囲を指定する記法

git log や git format-patch で使用します。git diff でも類似の記法が使えますが、意味が変わります。

範囲指定 意味
<rev> HEAD <rev>からたどれるコミット(<rev>またはその祖先)
^<rev> ^v1.1 他と組み合わせて使用し、<rev>からたどれるコミットを除外する
<rev1>..<rev2> r1..r2 ^<rev1> <rev2> の略記。<rev2>からはたどれるが、<rev1>からはたどれないコミット。感覚的には、 <rev2> が取り込んでいて、<rev1> がまだ取り込んでいないパッチの集合。
<rev1>…<rev2> r1…r2 <rev1> と <rev2> のどちらか片方からしかたどれないコミット。感覚的には、<rev1> (または<rev2>) に対して、これらのコミットにおける diff を patch あるいは patch –reverse していくと、<rev2> (または<rev1>) になる。
<rev>^@ HEAD^@ <rev> のすべての祖先。<rev> は除く。
<rev>^! HEAD^! <rev> 単独を指す。
<rev>^-<n> HEAD^-, HEAD^-2 <rev>^<n>..<rev> の略記。<rev> からはたどれるが、<rev>の<n>世代前の祖先からはたどれないコミット。<n>が省略された場合は1として扱う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です