【Git】git stash apply でエラーが出た時の対処法

  • 2020-01-29
  • 2023-08-27
  • Git
Git

git stash applyでエラーが出る

作業ディレクトリの内容をstash -uで退避後、applyを実行すると以下のエラーが表示される。
このエラーが出る限り、退避を元に戻せない模様。

xxx.java already exists, no checkout
Could not restore untracked files from stash

どういう時に起こるエラーか?

エラー文は「stashしたuntrackedのファイルをリストアできない」と言っている。
どうやら退避の戻し先となるブランチに、stashしたuntrackedのファイルと同名のファイルが存在する場合に起こるっぽい。

解決法

方法1. 作業ディレクトリからuntrackedのファイルを削除する。

git cleanを使って、作業ディレクトリからuntrackedのファイルを一度削除する方法。

削除対象とするuntrackedのファイルを確認し、

$ git clean -n

カレントディレクトリ内のuntrackedのファイルをすべて削除する。

$ git clean -f

ファイルを個別に削除したい場合は、オプションの後ろにファイルパスを指定すればOK。

$ git clean -f <ファイルパス>

方法2. 強制的にstash applyを実行する。

正確には、stashした内容を作業ディレクトリにマージする方法。

この場合、mergeコマンドで対象stashを指定すればOK。

$ git merge "stash@{0}"

ただ、これだとマージコミットが生成されることがあるので、マージコミットを取り消したい場合は、resetを実行する。

$ git reset --soft head^

まとめ

git stash applyでエラーが出たときの対処法をまとめました。
チーム開発(特に新規開発)だとstashする場面が度々発生するため、覚えておいて損はないと思います。