目次
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する場面が度々発生するため、覚えておいて損はないと思います。