web-dev-qa-db-ja.com

Gitリビジョン式とは何ですか?

したがって、私はGit GUIを使用してリポジトリを作成しています。しかし、Google、ドキュメント、または「改訂式」とは何か他の場所でトレースを見つけることができず、新しいブランチを作成する必要があります。

また、プログラムの他の多くの場所で使用されているようですので、知っておくことが重要です。

StackOverflowでこれに関する質問を見つけましたが、その人は答えを知りませんでした。

私が知る必要があるのは:リビジョン式とは何ですか?

34
Tyler Carter

gitは、いくつかの一般的な操作中にコミットを識別できる必要があります

https://git-scm.com/docs/git-rev-parse

コミットを識別する方法はいくつかあります。ブランチ、タグ、コミットsha1、または式を使用できます。例えば:

git log HEAD

HEADは最終的に特定のコミットに解決され、そのログが提供されます。あなたはまた言うことができます:

git log master

masterはブランチであり、特定のコミットに解決されます。

git log fd72e9c99312

IS実際のコミット。


以下のドキュメントはあなたが探しているものです。 git-rev-parseコマンドドキュメント http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html

改訂の指定

通常、リビジョンパラメータは、必ずしもではないが、コミットオブジェクトを指定します。いわゆる拡張SHA1構文を使用します。オブジェクト名を綴るさまざまな方法を次に示します。このリストの終わり近くにリストされているものは、コミットに含まれるツリーとブロブに名前を付けることです。

完全なSHA1オブジェクト名(40バイトの16進数ストリング)、またはリポジトリー内で固有のサブストリング。例えば。 dae86eで始まるオブジェクト名を持つオブジェクトがリポジトリに他にない場合、dae86e1950b1277e545cee180551750029cfe735とdae86eはどちらも同じコミットオブジェクトを指定します。

Git-describeからの出力。つまり、最も近いタグ。オプションでダッシュといくつかのコミットが続き、その後にダッシュ、g、および省略されたオブジェクト名が続きます。

シンボリックな参照名。例えば。マスターは通常、$ GIT_DIR/refs/heads/masterによって参照されるコミットオブジェクトを意味します。 heads/masterとtags/masterの両方がある場合は、heads/masterを明示的に言って、どちらが意味するかをgitに伝えることができます。あいまいな場合、aは次のルールで最初の一致をとることによって明確化されます。

$ GIT_DIR /が存在する場合、それが意味します(これは通常、HEAD、FETCH_HEAD、ORIG_HEAD、およびMERGE_HEADに対してのみ役立ちます)。

それ以外の場合、$ GIT_DIR/refs /(存在する場合)。

それ以外の場合は、$ GIT_DIR/refs/tags /(存在する場合)。

それ以外の場合は、$ GIT_DIR/refs/heads /が存在する場合。

それ以外の場合は、$ GIT_DIR/refs/remotes /(存在する場合)。

それ以外の場合は、$ GIT_DIR/refs/remotes // HEADが存在する場合。

HEADは、作業ツリーでの変更のベースとなるコミットに名前を付けます。 FETCH_HEADは、最後のgit-fetch呼び出しでリモートリポジトリからフェッチしたブランチを記録します。 ORIG_HEADは、HEADを大幅に移動するコマンドによって作成され、HEADの位置を操作前に記録して、ヒントを変更できるようにします。ブランチを簡単に実行する前の状態に戻します。MERGE_HEADは、git-mergeを実行したときにブランチにマージするコミットを記録します。

ブレースペアで囲まれた日付指定を伴う接尾辞@が続く参照(たとえば、{昨日}、{1か月2週間3日1時間1秒前}または{1979-02-26 18:30:00})前の時点での参照の値を指定します。このサフィックスは参照名の直後にのみ使用でき、参照には既存のログ($ GIT_DIR/logs /)が必要です。これは、特定の時点でのローカル参照の状態を検索することに注意してください。たとえば、先週のローカルマスターブランチの内容。特定の時間に行われたコミットを確認する場合は、-sinceおよび--untilを参照してください。

末尾に@が付いたrefと、中括弧のペアで囲まれた序数指定(例:{1}、{15})は、そのrefの前のn番目の値を指定します。たとえば、master @ {1}はマスターの直前の値で、master @ {5}はマスターの5番目の値です。このサフィックスは参照名の直後にのみ使用でき、参照には既存のログ($ GIT_DIR/logs /)が必要です。

空のrefパーツで@構文を使用すると、現在のブランチのreflogを取得できます。たとえば、ブランチblablaにいる場合、@ {1}はblabla @ {1}と同じ意味になります。

特別な構文@ {-}は、現在のブランチの前にチェックアウトされたth番目のブランチを意味します。

リビジョンパラメータの接尾辞^は、そのコミットオブジェクトの最初の親を意味します。 ^は、th番目の親を意味します(つまり、rev ^はrev ^ 1と同等です)。特別な規則として、rev ^ 0はコミット自体を意味し、revがコミットオブジェクトを参照するタグオブジェクトのオブジェクト名である場合に使用されます。

リビジョンパラメータの接尾辞〜は、名前付きコミットオブジェクトの第4世代の祖父母であり、最初の親のみに続くコミットオブジェクトを意味します。つまりrev〜3はrev ^^^と同等で、rev ^ 1 ^ 1 ^ 1と同等です。このフォームの使用例については、以下を参照してください。

接尾辞^の後にブレースペアで囲まれたオブジェクトタイプ名が続くこと(例:v0.99.8 ^ {commit})は、オブジェクトがタグである可能性があり、そのタイプのオブジェクトが見つかるか、オブジェクトを逆参照できないまで、タグを再帰的に逆参照しますもう(その場合はbarf)。以前に紹介したrev ^ 0は、rev ^ {commit}の省略形です。

接尾辞^の後に空のブレースペアが続くこと(v0.99.8 ^ {}など)は、オブジェクトがタグである可能性があり、非タグオブジェクトが見つかるまで再帰的にタグを逆参照することを意味します。

コロン、スラッシュ、テキストの順に続きます。これは、指定したテキストで始まるコミットメッセージを持つコミットの名前です。この名前は、すべての参照から到達可能な最も若い一致するコミットを返します。コミットメッセージが!で始まる場合は、それを繰り返す必要があります。特別なシーケンス:/ !、その後に!以外の何かが続きます現在のところ予約されています。

サフィックス:パスが続きます。これは、コロンの前の部分で指定されたツリーっぽいオブジェクトの指定されたパスにあるblobまたはツリーに名前を付けます。

コロン、オプションでステージ番号(0〜3)、コロン、パスが続く。これは、指定されたパスにあるインデックスのblobオブジェクトに名前を付けます。欠落しているステージ番号(およびそれに続くコロン)は、ステージ0エントリーを示します。マージ中、ステージ1は共通の祖先、ステージ2はターゲットブランチのバージョン(通常は現在のブランチ)、ステージ3はマージされるブランチのバージョンです。

Jon Loeligerによるイラストです。コミットノードBとCはどちらもコミットノードAの親です。親コミットは左から右に並べられます。

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
A =      = A^0
B = A^   = A^1     = A~1
C = A^2  = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2
35
gahooa

gahooaは包括的な答えを提供します。一般的なケース:

  • 既存のブランチの名前(例:master
  • SHA1チェックサムの最初の数桁。gitkまたはgit log

Gitの素晴らしい世界へようこそ。 TMIはコースの標準です...

10
Norman Ramsey

Emacsを使用する場合のもう1つのケース:Ctrl-x v lと入力してすべてのリビジョンを一覧表示します。 gitの初心者(ただしEmacs/CVSは対象外)の場合、リビジョンが次のようにリストされているのに驚いた。

commit 8d5ab12cd76d5e6098e5894c8713ec605fd9f153

これはMajor.minor.bugfix.build表記からのすっきりした変更です。

さらに(意外にも)驚くべきことは、EmacsがCVSではなくgitを参照する必要があることを(.emacsを介して)通知する必要なく、自動的にgitを処理することです。かなり素晴らしい。

つまり、要約すると、Emacsがリビジョンを要求するとき、その40桁の16進数を入力するだけです。

0
WinWin

初めてブランチを作成しようとしているとき、Git GUIはリビジョン式を要求します。私の理解から、(ファイルの新しいブランチ/変更)などの新しく加えられた変更を追跡するには、gitがすでに作成およびコミットされたブランチを必要としていると思います何かと比較してください(ここではマスターブランチ)。

0
saurabh gautam