トラブルシューティング

変更中のファイルがあって switch できない

ブランチを切り替えようとしたら「変更が上書きされます」エラーが出るときの対処法

変更中のファイルがあって switch できない diagram

なぜ switch できないのか

ブランチを切り替えると、作業ディレクトリのファイルが切替先のブランチの状態に置き換わります。

もし今のブランチで変更中のファイルが切替先でも異なる内容を持つ場合、変更が上書きされて消えてしまうため、Git がエラーで止めてくれます。

bash
$ git switch feature
error: Your local changes to the following files would be overwritten by checkout:
        src/app.ts
Please commit your changes or stash them before you switch branches.
Aborting

対処法 1: stash で一時退避

  1. git stash -m "説明" で退避

    作業途中でコミットしたくない場合に便利です。後から識別できるよう説明を付けます。

  2. ブランチを切り替えて用事を済ませる

    git switch feature などで目的のブランチに移動し、必要な作業を行います。

  3. 元のブランチに戻って git stash pop

    退避した変更を復元し、作業を再開します。

bash
# 1. 変更を退避
git stash -m "app.ts の修正途中"

# 2. ブランチを切り替え
git switch feature

# 3. 用事を済ませたら元に戻る
git switch main

# 4. 退避した変更を復元
git stash pop

対処法 2: コミットしてから切り替え

作業がある程度まとまっているなら、コミットしてからブランチを切り替えるのが最もシンプルです。

後で修正したくなったら、戻ってきて git commit --amend で修正するか、新しいコミットを追加します。

bash
# 変更をコミット
git add .
git commit -m "WIP: app.ts の修正途中"

# ブランチを切り替え
git switch feature

変更が競合しない場合は切り替えられる

切替先のブランチで該当ファイルが同じ内容の場合は、変更を保持したままブランチを切り替えられます。

エラーが出るのは、切替先のファイル内容が異なり変更が消える恐れがあるときだけです。

関連コマンド