git:「branchname」と「refs / heads / branchname」の違い


97

例で説明するのが最善です:私はリポジトリのブランチ0.58にいて、これは私がどのようにプルするかです:

git pull origin 0.58

「gitpull」と呼ぶと、次のようになります。

ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.0.58.remote = <nickname>
    branch.0.58.merge = <remote-ref>
    remote.<nickname>.url = <url>
    remote.<nickname>.fetch = <refspec>

See git-config(1) for details.

そのブランチをチェックアウトしたときに、おそらくいくつかのオプション(--track?)を忘れたようです。とにかく、私は今これを設定しました:

git config branch.0.58.merge 0.58
git config branch.0.58.remote origin

そして、これはうまくいくようです。次に、興味があるという理由だけで、これらの設定について他のブランチを調べました。

ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin

「0.58」に違いはありますか、それとも「refs / heads / 0.58」を指定する必要がありますか?

正確な違いは何ですか?


1
タイトルのタイプミスに対処するために(今すぐ変更して古いタイトルをいじることなくheads「s」を付けて「refs / heads / branchname」と読む必要があります。
RomainValeri

回答:


129

Arefは、ブランチ(ヘッド)、タグ、リモートブランチなど、コミットを指すものです。.git/refsリポジトリに3種類すべての参照があると仮定すると、ディレクトリにヘッド、リモート、およびタグが表示されます。

refs/heads/0.580.58という名前のブランチを指定します。refが含まれる名前空間を指定しない場合、gitはデフォルトの名前空間を検索します。これにより、0.58のみを使用することがおそらくあいまいになります。つまり、ブランチと0.58という名前のタグの両方を持つことができます。


3
どうもありがとう、これはそれを非常によく説明します。そのような名前の付いたタグがないので、単純な「0.58」で動作しました。
アルバート

1
そうです、基本的には常に完全に問題ありませんが、安全であるのは良いことです。
Cascabel

この答えは宝物です。最後に誰かがGitについて説明し、私はそれを楽しんでいます!ありがとう。
aderchox 2018

9
ここではわかりやすくするためにそれらのすべてです:refs/heads/refs/remotes/refs/tags/
ジム・アホ


19

見る、 branchName GITが実際にそれを識別することができます前に完全に解決する必要があります。完全に解決された名前はになりますrefs/heads/branchName

有名なコマンドの1つgit checkout branchName実際には自動的に完全に解決して、チェックアウトする場所を特定します。自動的に行われるため、自分で完全に作成することはありません。

それはどのようにそれをしますか?ここを見てみましょう

もしrefname:、例えばmasterheads/masterrefs/heads/master

シンボリック参照名。たとえば、masterは通常、によって参照されるコミットオブジェクトを意味しますrefs/heads/masterheads/masterとの両方がある場合は tags/masterheads/masterGitにどちらを意味するかを明示的に伝えることができます。あいまいな場合、<refname>は、次のルールで最初の一致を取ることによって明確になります。

1.If$GIT_DIR/<refname>あなたが何を意味するかで存在しているが、(これは通常、便利さだけのためにHEADFETCH_HEADORIG_HEADMERGE_HEADおよび CHERRY_PICK_HEAD)。

2.それ以外の場合、 refs/<refname>場合、存在する場合。

3.それ以外の場合、 refs/tags/<refname>場合、存在する場合。

4.それ以外の場合、 refs/heads/<refname>場合、存在する場合。

5.それ以外のrefs/remotes/<refname>場合、存在する場合。

6.それ以外の場合、 refs/remotes/<refname>/HEAD場合、存在する場合。

したがって、上記の6つの手順で、これが何であるかを解決しようとします branchName。したがって、完全に解決されたbranchNameを指定する必要はありません。

ここここをくださいも。

また、.gitディレクトリに移動して、refフォルダ内を確認してください。

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