以下のどちらかの例に沿って、コマンドを実行すればおk
git stash push <pathspec> [<pathspec>...]
git stash -- <pathspec> [<pathspec>...]
※pathspec = ファイルのパスです
※仮に「hoge」というファイルをstashしたい場合は、git stash push hogeもしくはgit stash -- hogeと記述します。
勝手なQA
git stash pushってなに?
ファイルをstashするためのコマンドです。
みなさんが普段どのようにしてファイルをstashしているのか分かりませんが、おそらくgit stashを使っているのではないでしょうか。実はgit stashというコマンドは暗黙的にサブコマンドにpushが追加されてgit stash pushとして実行されるようになっています。
参考: Git - git-stash Documentation
例に上げられている2つのコマンドの違いを教えて
完全版か簡略版かの違いです(1つ目が完全版で2つ目が簡略版です)。
先述の通り、git stash pushはgit stashに簡略化できるわけですが、以下のようにサブコマンドの位置にファイルパスを入れてしまうと、Git側がそれをファイル名なのかサブコマンドなのかを区別できなくなくなってしまいます。
git stash <pathspec> [<pathspec>...]
そこで、サブコマンドの位置に--という文字列を含めて、ファイルパスとサブコマンドの曖昧さを回避しています。
そもそも、なんで今更git stashについての記事を書こうと思ったの?
「git stash 特定のファイルのみ」とかで検索すると、検索結果の多くが古い情報であったり、部分的におかしい情報ばかりで正しい情報が手に入らなかったからです。たとえば、「stashしたいファイル以外をgit addしてから残っているファイルをgit stashする」とか、「git stash push -- pathspec」とかとか……厳密には間違ってはいないんですけれど冗長なコマンドを教えている記事が数多く存在していました。そういった情報から皆さんを守るためにこの記事を書いています(?)。
余談
つい最近、git stash saveが非推奨になっていたことを知って衝撃を受けました。
git stash saveが非推奨ならstash entryにどうやってメッセージを付ければいいんだ?と首を捻ったのですが、どうやらgit stash pushの--message(-m)オプションを使えば簡単にstash entryにメッセージを付けられるようです。
gitコマンドって割と雰囲気で使っちゃうことがあると思いますが、結構隠れた仕様などがあったりするので、普段使っているコマンドだけでもしっかりと公式の仕様書を見てみると良さそうです。
