あ、別のブランチで作業してしまった!時の対処法

はじめに

Gitを使って開発をしていると、時々「あ、ブランチ変えるの忘れてた」という状況に遭遇することがあります。
そういった時にどう対処すればいいのか、具体的な手順を共有します。

問題の設定

例えば、main ブランチで作業している最中に、実はこれ新機能用のブランチで行うべきだと気づいたとします。
まだコミットはしていないので、どうにかしてこれを新しいブランチに移したい。そんな時は以下の手順で対処できます。

想定ケース

Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   config/database.yml

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Dockerfile
        docker-compose.yml

no changes added to commit (use "git add" and/or "git commit -a")

このような状況で、config/database.ymlが変更され、Dockerfiledocker-compose.ymlが新規に作成されているとします。

対処法

ステップ1: すべての変更をステージングエリアに追加

このステップはオプションですが、全ての変更をステージングエリアに追加することで後のステップが少し簡単になります。

git add .

ステップ2: 変更を退避(stash)

git stash コマンドを使って現在の変更を退避させます。

git stash

ステップ3: 新しいブランチを作成して切り替える

git checkout -b <新しいブランチ名>で新しいブランチを作成して切り替えます。

git checkout -b new-feature-branch

ステップ4: 変更を適用

git stash applyで退避させた変更を新しいブランチに適用します。

git stash apply

ステップ5: 変更をコミット

git commit -m "コミットメッセージ"で変更を新しいブランチにコミットします。

git commit -m "Add Docker support"

ステップ6: 新しいブランチにプッシュ

git push origin new-feature-branchで新しいブランチをリモートリポジトリにプッシュします。

git push origin new-feature-branch

まとめ

以上が「あ、これ別のブランチでやるべきだった」と気づいた時の対処法です。
この手順によって、誤って作業してしまったブランチから正しいブランチへと作業を移行することができます。