40

アットマークは、さまざまな方法でリビジョン@を指定するために git でよく使用されます。例えば、

  1. <ref>@{<date>}の状態で参照を指定します<date>

    例: git diff master@{yesterday} master.

  2. <ref>@{<n>}n番目の前の状態で参照を指定します。

    例: git diff master@{1} master.

  3. @{-<n>}現在のブランチの前にn番目にチェックアウトされたブランチを指定します。

    例: git checkout @{-5}.

  4. <ref>@{upstream}参照用の上流ブランチを指定します。

    例: git diff master@{upstream} master.

ただし@は git コマンドでも他の方法で使用されています。

git rebase -i @~4
git log @^^..@

@これらの例のアットマークはどういう意味ですか?

4

2 に答える 2

49

Git バージョン 1.8.5 の時点で@、先頭のブランチ/参照名と and のような序数のサフィックスのないアット{n}マークは、特別な Git 参照の同義語/エイリアス/ショートカットにすぎません。HEAD@{1}master@{1}HEAD

4 つの大文字 "HEAD" を入力する代わりに、"@" と入力できます (例: "git log @")。

したがって、これらのコマンドについては

git rebase -i @~4
git log @^^..@

最初に出現した@with HEAD(またはheadWindows または OS X を使用している場合)を単純に置き換えることができます。

git rebase -i HEAD~4
git log HEAD^^..HEAD

では、どういうHEAD意味ですか?Git リビジョンを指定するための公式の Linux Kernel Git ドキュメントで説明されているHEADように、現在作業コピー (または Git 用語では「作業ツリー」) としてチェックアウトしているコミットの特別なショートカット リファレンスです。

HEAD は、作業ツリーの変更に基づいたコミットに名前を付けます。

HEAD特別な参照が何を意味するかについて、これらの他の Stack Overflow の質問を読むこともできます。

  1. Git の HEAD および ORIG_HEAD
  2. 正確には git HEAD とは何ですか? .

VonC は、このスタック オーバーフローの回答 (一番下の最後のセクション) で@ショートカットとして選択された理由に関する興味深い情報も見つけました。head

Git でよくあるように、 while@は便利なショートカットですが、常にの有効な置き換えになるとは限りませんHEAD。例:

$ git bundle create temp.bundle @
Enumerating objects: 25, done.
Counting objects: 100% (25/25), done.
Compressing objects: 100% (20/20), done.
Total 25 (delta 3), reused 0 (delta 0), pack-reused 0

$ git bundle list-heads temp.bundle
c006e049da432677d1a27f0eba661671e0524710 refs/heads/master

$ git bundle create temp.bundle HEAD
Enumerating objects: 25, done.
Counting objects: 100% (25/25), done.
Compressing objects: 100% (20/20), done.
Total 25 (delta 3), reused 0 (delta 0), pack-reused 0

$ git bundle list-heads temp.bundle
c006e049da432677d1a27f0eba661671e0524710 HEAD

この場合、 usingは forではなく (たまたま指していたブランチ)@の置き換えに似ています。後で結果のバンドルから取得しようとする場合、取得する参照を指定する必要があります (を使用した場合) 。明示的に指定した場合は、その必要はありません。masterHEADHEADmaster@HEAD

于 2013-07-28T15:58:58.497 に答える