はじめに
GitHubでプルリクエストを作ろうとしたところ、mainブランチが存在しないことに気づきました。原因を辿ると、最初のコミットを削除しようとした際に誤ってmainブランチを消してしまっていました。本記事では、その原因と復旧手順を紹介します。
問題
プルリクエストを作成しようとしたところ、GitHubのリポジトリにmainブランチが存在せず、chore/setup-hono ブランチのみがdefaultブランチとして残っている状態になっていました。
原因は以下の操作です。最初のコミットを取り消すために git update-ref -d HEAD を実行したことで、mainブランチのコミット履歴が空になってしまいました。
# これを実行したことでmainブランチのコミットが消えた
git update-ref -d HEAD
その後、chore/setup-hono ブランチから git checkout -b main でmainブランチを作り直しましたが、この方法だとコミット履歴をそのまま引き継いでしまいます。結果としてmainとchore/setup-honoに差分がなくなり、プルリクエストが作れない状態になってしまいました。
解決方法
--orphan オプションを使って、履歴を持たない独立したmainブランチを作成し直しました。
1. 既存のmainブランチを削除する
git branch -D main
2. 履歴のない空のmainブランチを作成する
git checkout --orphan main
--orphan は親コミットを持たない、完全に独立したブランチを作るオプションです。通常の checkout -b と違い、既存の履歴を引き継ぎません。
3. ステージングエリアを空にする
--orphan 直後は前のブランチのファイルがステージングに残っているため、すべて取り除きます。
git rm -rf .
※ .gitignore に記載されているファイル(node_modules や .wrangler など)はGitの追跡対象外のため、影響を受けません。
4. 空のコミットを作成する
変更がない状態でもコミットできるよう --allow-empty を使います。
git commit --allow-empty -m "initial commit"
5. リモートにプッシュする
git push origin main
6. GitHubでデフォルトブランチをmainに変更する
- GitHubのリポジトリページで「Settings」を開く
- 左メニューの「Branches」をクリック
- Default branchを
mainに変更する
これでmainブランチが復活し、chore/setup-hono との差分が出るようになったためプルリクエストを作成できるようになりました。
おわりに
git update-ref -d HEAD は初回コミットを取り消す際に便利なコマンドですが、ブランチの状態を把握せずに使うと意図しない結果になることがあります。また --orphan オプションを使うことで、履歴を引き継がない独立したブランチが作れることを学びました。プルリクエストベースの開発をする際は、まずmainブランチをきちんと用意してからfeatureブランチを切るのが基本です。
参考
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp