喧嘩を売るつもりはございません。
理由
Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法というQiita記事のコメント欄で
ローカルの
master
ブランチは別に持たなくても良い(むしろローカルにmasterがあるから表題のミスが起こる。)
というコメントがあり、確かにな〜と共感したのが始まり。
masterで作業していることに気づかず、プッシュするときに「あぁ…」となる人も多いはず。
こういう悲しみが生まれること無く、皆が幸せになれるのではないでしょうか?
とりあえずmasterブランチを消そう
git branch -D master
で削除。さよなら。
git fetchしましょう
git pull
を主に使用している人にはあまり馴染みのないコマンド(私もつい最近知った)。
git fetchの理解からgit mergeとpullの役割
ここに非常にわかりやすく、git fetch
やgit 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
(但し、編集不可)
最後に
問題ありまくりな内容だと思われますので、補足や指摘お待ちしております。