1. ホーム
  2. git

[解決済み] なぜ "git status" は私が master ブランチにいると表示し、"git branch" は新しく作成されたリポジトリにないと表示するのでしょうか?

2023-07-04 20:58:13

質問

ある処理を自動化しようとしていて、そのために git branch コマンドを発行して、自分がどのブランチにいるのかを調べています。新しく初期化されたレポを除いて、すべてがうまくいっています。 git branch は何も返しません。私はそのレポに対して何もしておらず、最初のコミットさえしていないことを考えると、その答えを受け入れることができます。しかし、もし私が git status を実行すると、私が master ブランチにいると表示されます。

$ mkdir todelete
$ cd todelete
$ git init
Initialized empty Git repository in /u/u70021a/todelete/.git
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
$ git branch
$

私は何か間違ったことをしているのでしょうか?私が正しく設定していない設定があるのでしょうか?

Git を初めて使う人が何人もいるのですが、自分がどのブランチにいるのかを示すコマンドは何も表示されないのに、status コマンドは表示されるのはなぜなのか、説明することができません。

どうすれば解決できますか?

他の2つの回答をupvoteしましたが、考え方はシンプルだと思います。 存在しないブランチにいることができる。 それは 通常 というのも、あるブランチ名が存在するためには、そのブランチ名は が必要だからです。 は既存の有効なコミットのハッシュ ID を識別する必要があるからです。 新しい空のリポジトリにはコミットがないので、ブランチ名はまだ存在することが許されていません。

それにもかかわらず、あなたは、最初は いくつかの ブランチにいます。 あなたがいるブランチは、その名前が特別な名前 HEAD . 新しい空のリポジトリでは、Git は名前 master (という名前で保存されます(より正確には refs/heads/master -ブランチのフルネーム) を HEAD にあるため、あなたは master で、一方 master は存在しない。

どの存在しないブランチにいるのかを変更するには git checkout -b :

$ git init
Initialized empty Git repository in [path]
$ git checkout -b asdf
Switched to a new branch 'asdf'
$ git checkout -b hello
Switched to a new branch 'hello'

存在しないブランチにいるときは常に、次にコミットするときに が作成されます。 ブランチを作成します。 これはまた、どのように git checkout --orphan が動作します。