以下のどちらかの例に沿って、コマンドを実行すればお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コマンドって割と雰囲気で使っちゃうことがあると思いますが、結構隠れた仕様などがあったりするので、普段使っているコマンドだけでもしっかりと公式の仕様書を見てみると良さそうです。