「gitブランチ」にマスターがないのはなぜですか?


94

私はgitの初心者であり、「マスター」ブランチについて読み続けています。「マスター」は、人々が使用した従来の名前にすぎませHEADんか、それとも次のような特別な意味がありますか?

私が持っgit branchているクローンで実行すると、1つの単一のブランチしか表示されません。「マスター」はまったくいません。git checkout master(多くのチュートリアルやガイドで見られるように)タイプすると、

error: pathspec 'master' did not match any file(s) known to git.

私のクローンになぜmaster誰もがそれが常に存在することをほのめかしているように思わないのに、私は混乱しています。

回答:


73

ほとんどのGitリポジトリmasterはメイン(およびデフォルト)ブランチとして使用します-を介して新しいGitリポジトリを初期化するgit initmaster、デフォルトでチェックアウトされます。

ただし、リポジトリのクローンを作成する場合、デフォルトのブランチは、リモートがHEAD指すものです(HEAD実際には、ブランチ名を指すシンボリック参照です)。したがって、クローンを作成したリポジトリがHEAD、たとえばを指しているfoo場合、クローンにはfooブランチがあります。

クローン元のリモートにはまだmasterブランチがあるかもしれませんが(で確認できますgit ls-remote origin master)、git cloneリモートのをチェックアウトするだけなので、デフォルトではそのブランチのローカルバージョンを作成しませんHEAD


6
そして、それが存在する場合、マスターを元の場所からチェックアウトする方法は?
Bunyk 2014年

HEADをマスターに設定する方法
Matt Smith

32
git initでリポジトリを作成しましたが、masterブランチは作成されませんでした。Githubでは、ブランチは自動的に作成されますが、Bitbucketでは作成されません。mising手順は次のとおりだった:git add .git commit -m "Test"、そしてgit push -u origin master
Shailen 2014年

12
@アンバーこのエラー「致命的:マスター:有効なSHA1ではありません」
KK_07k11A0585 '28

1
@Amber git ls-remote origin masterは何も表示しません。
Parisa Khateri

86

ローカルには存在しないがリモートリポジトリにあるブランチをチェックアウトするには、次のコマンドを使用できます。

git checkout -t -b master origin/master

この質問はかなり古いですが、助けてくれてありがとう。しかし、あなたの答えは私が求めていたものではありませんでした。
aberrant80 2014年

fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre 2017年


githubで修正され、マスターブランチを作成してデフォルトとして設定
Raphael Onofre

45

master は単にブランチの名前です。新しいリポジトリが作成されるときにデフォルトで作成されることを除いて、それについて魔法はありません。

で再度追加できgit checkout -b masterます。


git checkout -b master現在のブランチから新しいブランチを追加するだけです。
nnyby 2013年

1
@nnyby git checkout -b mastermaster、何からでもブランチを作成しHEADます。別のブランチにいる場合は、そのmasterブランチからブランチを作成します。すでにmasterブランチがある場合を除いて(たとえば、ブランチを削除したり、コミットしたことがない場合を除いて)ブランチを作成します。すでにmasterブランチがある場合、このコマンドはエラーを表示します。
Matt Curtis

2
私の質問は、どうやってマスターを誤って削除してしまったのですか?
エリックウォーカー

@EricWalker masterは単なるブランチであり、で削除できますgit branch -d master。gitは現在作業しているブランチを削除しないように保護しますが、ブランチを保護する特別な方法はありませんmaster。それより具体的には、あなたがそれをどのようにしたかを言うのは難しいです。おそらくあなたはあなたのシェルのhistoryコマンドを使って調べますか?
Matt Curtis

1
こんにちは@MattCurtis、あなたの答えは現在誤解を招くものです。git checkout -b masterHEADがorigin / masterに設定されている場合にのみ機能します。それ以外の場合(たとえば、「開発中」の場合)git checkout -b masterは、現在のHEAD位置に基づいて(「開発中」など)、「マスター」という名前のブランチを作成します。また、どのブランチが新しいブランチの靱皮になるかを述べる必要があります。@Bunykがこのスレッドで正しい答えを持っています:stackoverflow.com/a/21330943/287109
AVIDeveloper

23

まったく新しいリポジトリでも同じ問題が発生しました。で作成してみましたgit checkout -b masterが、ブランチは作成されませんでした。その後、変更を加えてコミットすると、gitがmasterブランチを作成したことに気付きました。


1
誤解を招く部分は、私にはマスターがいると人々が言っ​​ているということですが、私がしようとすると、マスターがいないというエラーメッセージが表示されます。(リポジトリがまだ空の間にdevブランチを作成しようとしていました。)何か(任意のファイル)をコミットすることで、マスターが存在するようになり、他のことを続けることができました。私は他の答えで物事を試しましたが、何も助けにはなりませんでした。ここでのこの1つの答えは、世界中の多くの人々に当てはまる可能性があります。(私はGitでハッシュについて多くを読みました。最初に何もない場合、ハッシュするものはないと思います。)
Fai Ng

15

私の場合、開発ブランチはありましたが、マスターブランチはありませんでした。そのため、新しく作成したHEADが既存のブランチを指すようにリポジトリを複製しました。次に、不足しているマスターブランチを作成し、新しいマスターブランチを指すようにHEADを更新しました。

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

ああ、私たちは行きます。私にはマスターも何もいませんでした。最初に新しいファイルと最初のコミットを追加しました-次にこれを行いました。魅力のように機能しました
ダスティンシルク

12

複製した新しいレポの場合、空のままの可能性があります。その場合、次のようになります。

git push -u origin master

おそらくそれを整理する必要があります。

(私の場合はそうでした。これが同じ問題であるかどうかわからないので、念のため投稿するべきだと思いました。他の人を助けるかもしれません。)


8

私は同じ問題に遭遇し、問題を理解しました。リポジトリを初期化するとき、実際にはブランチはありません。あなたは、プロジェクトの実行を開始するとgit add .、その後git commitマスターブランチが作成されます。

何もチェックしないと、masterブランチはありません。その場合は、他の人が提案した手順に従う必要があります。


2
本当。「git init」に続けて「git checkout -b somebranchname」を実行すると、マスターブランチがなくなります
koem

フォルダが空の場合もこれでは不十分な場合があります。したがって、これを機能させるには、いくつかのファイルを追加する必要があります。この別のぎこちなさは実際に残念です。
alehro

0

行うには、masterブランチに少なくとも1つのローカルコミットが必要なようです。

git push -u origin master

したがって、実行したgit init .後もgit remote add origin ...、実行する必要があります。

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