🦁

✍️ Git Main ブランチ リセット

に公開

Gitで開発していると、ついmainブランチで作業を進めてしまい、「やっぱり別ブランチに移してmainは初期状態に戻したい!」という場面によく遭遇します。

この記事では、作業中のコミットを別ブランチに退避しつつ、mainブランチをリポジトリの最初のコミット状態に戻す手順を、かたくなりすぎずにサクッと解説します。


1. いまのmainを別ブランチに避難する

1-1. 避難用ブランチを作成する

まずは、今mainに積んでしまったコミットを丸ごとコピーして、新しいブランチに退避させましょう。後でまたこのブランチに戻って作業を続けられるので安心です。

# mainブランチにいる状態で、新しいブランチを作成
git checkout -b feature/backup-main
  • feature/backup-main は例なので、好きな名前に変えてください。
  • ここから先の作業はすべて feature/backup-main に残ります。

2. mainブランチを最初のコミットまでリセットする

2-1. mainに戻る

まずはmainブランチに切り替えます。

git checkout main

2-2. 初回コミットのハッシュを調べる

Gitでは「親を持たないコミット」が最初のコミットです。以下のコマンドでそのハッシュを取得できます。

git rev-list --max-parents=0 HEAD

実行すると、長い16進数の文字列(例: 3f1a9b7c2e4d5f6a7b8c9d0e1f2a3b4c5d6e7f8g)が表示されます。これが最初のコミットです。

ポイント: リポジトリを複数人で触っていたり、過去に何度もmainにpushしていると、初回コミットがどれか迷うかもしれません。もし複数行出てきたら、日付やコミットメッセージを見ながら狙っているコミットを選んでください。

2-3. mainをハードリセットする

調べたハッシュを使って、mainを最初のコミット状態に戻します。

git reset --hard <初回コミットのハッシュ>

例:

# 例としてハッシュが3f1a9b7c2e4d5f6a7b8c9d0e1f2a3b4c5d6e7f8gの場合
git reset --hard 3f1a9b7c2e4d5f6a7b8c9d0e1f2a3b4c5d6e7f8g
  • --hard オプションをつけると、インデックスや作業ツリー(ファイル)もすべてそのコミットと同じ状態に戻ります。
  • この状態で git log を確認すると、最初のコミットだけが残っているはずです。

2-4. (必要なら)リモートのmainも上書きする

もしリモートのmainをすでに更新していて、そちらも初回コミットに戻したい場合は、強制プッシュを行います。

git push -f origin main

注意: 強制プッシュをするとリモートの履歴が上書きされるので、チームで共有している場合は必ず事前に連絡しておきましょう。ほかのメンバーがmainをベースに作業していると、履歴がなくなって大混乱になる恐れがあります。


まとめ

  1. 別ブランチに作業を退避する

    git checkout -b feature/backup-main
    

    → mainの履歴をまるごと新しいブランチにコピー。ここに作業履歴が残る。

  2. mainに戻って初回コミットのハッシュを調べる

    git checkout main
    git rev-list --max-parents=0 HEAD
    
  3. 調べたハッシュでmainをハードリセット

    git reset --hard <初回コミットのハッシュ>
    

    → これでmainは最初の状態に。

  4. (必要なら)リモートに強制プッシュ

    git push -f origin main
    

    → リモートも同じ状態に戻す。チームで共有している場合は要注意。

以上の手順で、

  • 今までの作業は feature/backup-main に残り、
  • mainブランチは最初のコミットだけが残るすっきり状態になります。

「mainを初期化したいけれど作業を残しておきたい」ケースにピッタリなので、ぜひ覚えておいてください。

この記事が、みなさんのGitライフをちょっとだけラクにできれば嬉しいです。

Let's happy coding!

Discussion