web-dev-qa-db-ja.com

git stash saveとgit stash pushの違いは何ですか?

いつgit stash saveの代わりにgit stash Pushを使用する必要がありますか?

46
David Burson

git stash saveは、オプションではない単一の引数(stashメッセージ)を受け入れます。

git stash Pushは、オプション-mのメッセージを受け入れ、引数としてスタッシュするファイルのリストを受け入れます。

39
phd

明確にするために、Git 2.15/2.16(2018年第1四半期)から、git stash saveの代わりにgit stash Pushが推奨されなくなりました(git stash saveはまだ使用可能です)。

commit c0c0c82commit fd2ebf1commit db37745 (2017年10月22日)を参照してくださいby Thomas Gummerer(tgummerer .
Junio C Hamano-gitster- in commit 40f1293 、2017年11月6日)

stash:マーク「git stash save」はmanページで廃止予定

'git stash Push'は、 'git stash save'のインターフェースの歴史的なwar贅を修正します。
'git stash Push'には 'git stash save'のすべての機能があり、より優れた、より一貫したユーザーインターフェイスにより、 'git stash save'が非推奨になりました。

stash:「stash Push」のsuperfluosヘルプを削除

git stash save」インターフェースを使用すると、ユーザーは「-」で始まるメッセージを簡単に追加できます。「git stash save」はコマンドライン引数として解釈されます、失敗します。
この場合、「-」で始まるメッセージを使用してスタッシュを作成する方法に関する追加のヘルプを追加しました。

'stash Push'の場合、メッセージは-mフラグで渡され、この潜在的な落とし穴を回避します。
-」で始まるpathspecのみを、「-- --<pathspec>」を使用してコマンドラインパラメーターと区別する必要があります。
これはgitコマンドラインインターフェースではかなり一般的であり、他のケースでユーザーが何を望んでいたかを推測しようとはしません。

Pathspecsを渡すこの方法は他のgitコマンドでは非常に一般的であり、そこで追加のヘルプを提供しないため、 'git stash Push'のエラーメッセージでも同じことを行います。


Git 2.18(2018年第2四半期)では、コマンドラインの補完(contrib/)が「git stash save」が非推奨になったことを教えられました(「git stash Push」は新しい世界で推奨されるスペルです) )そして、「git stash Push」が可能な場合に可能な候補としてそれを提供しません。

commit df70b19commit 0eb5a4f (2018年4月19日)by Thomas Gummerer(tgummerer
Junio C Hamano-gitster- in commit 79d92b1 、2018年5月8日)

completionstash -pstash Push -pのエイリアスを作成します

マンページで「git stash -p」のエイリアスとして「git stash Push -p」を定義します。完了スクリプトでも同じことを行うので、ユーザーが「git stash Push」を使用している場合、「git stash -p --<tab>」に指定できるすべてのオプションが完了します。
現在、ユーザーが取得できる追加オプションは「--message」のみですが、今後さらに追加される可能性があります。

29
VonC