Git

ローカルリポジトリのmasterブランチは別に無くても良い?

More than 3 years have passed since last update.

喧嘩を売るつもりはございません。


理由

Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法というQiita記事のコメント欄で


ローカルのmasterブランチは別に持たなくても良い(むしろローカルにmasterがあるから表題のミスが起こる。)


というコメントがあり、確かにな〜と共感したのが始まり。

masterで作業していることに気づかず、プッシュするときに「あぁ…」となる人も多いはず。

こういう悲しみが生まれること無く、皆が幸せになれるのではないでしょうか?


とりあえずmasterブランチを消そう

git branch -D masterで削除。さよなら。


git fetchしましょう

git pullを主に使用している人にはあまり馴染みのないコマンド(私もつい最近知った)。

git fetchの理解からgit mergeとpullの役割

ここに非常にわかりやすく、git fetchgit pullについて解説されています。

つまり、git fetchすることでリモートリポジトリの最新情報をローカルリポジトリに持ってこられるわけですね。


最新のコミットを各ブランチに反映させるには

masterブランチが無いので、git merge masterとかgit rebase masterでブランチを最新状態に更新できなくなりました。

しかし、git branch -aを実行してみてください。remotes/origin/masterというリモートブランチを確認できるかと思われます。

これこそが、リモートリポジトリのmasterブランチになります。

つまり、git merge origin/masterなりgit rebase origin/masterなりを実行すれば、最新の状態に更新が可能になるというわけですね。


リモートリポジトリの今の状態を確認したい

git checkout origin/masterする。

You are in 'detached HEAD' state. You can look around, make experimental

changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at 4939890...

こんな感じの警告文が表れると思います。要約すると


直接コミットを参照してるから、変更をコミットしてもどこにも反映されないよ


って言ってるのかな?

gitのHEADがブランチから外れてしまう現象とその直し方

ここの記事に詳しい解説が記載されているようですね。


まとめ


  • リモートリポジトリの最新状態を持ってくる→git fetch

  • ブランチに最新状態を反映させたい→git merge(rebase) origin/master

  • 最新のファイル情報が見たい→git checkout origin/master(但し、編集不可)


最後に

問題ありまくりな内容だと思われますので、補足や指摘お待ちしております。