【git stash】コミットせずに一時退避する選択

Git

実装進めていたけど、急ぎで別の対応見なければなくなっちゃった。

でも、まだ実装途中だからコミットはしたくないないんだよね。

pullしたいんだけど、手元に変更が発生しているからプルができないよ。

こういうこと、よくありますよね。
そんな時に使える便利な stash (スタッシュ)コマンドがあります。

この記事を読むことで、きっと git stash の使い手になれることでしょう(笑)

この記事は次の3点について説明していきます。

  • stashとはどのような操作なのか
  • これだけは覚えておきたいstashコマンド
  • stashを使うために覚えておきたいコマンド

stashを使えるようになりたいと考えている方はぜひ記事を読んでいってください。

スポンサーリンク

stashとはどのような操作なのか

「実装進めていたけど、急ぎで別の対応見なければならなくなってしまった。でもまだコミットしたくない。」
「ローカルブランチをpullして最新化したいけど、変更差分があってpullができない。」

例えばこのようなときに使えるコマンドに stash (スタッシュ)があります。

stashとは?コミットせずに変更内容を一時退避することができるコマンドです。
もちろん、退避した変更は後から再度適用することができます
今回のようなケースで覚えておいたほうが良いコマンドがありますので紹介します。

これだけは覚えておきたいstashコマンド

まず、覚えておきたいstashコマンドを紹介します。

フォーマット

$ git stash save -u “<メッセージ>”

使用例

$ git stash save -u “トップ画面作成”

このコマンドで変更内容を一時退避することができます

このコマンドの解説

git stash save が変更内容を一時退避するためのコマンドです。
このコマンドだけでも変更を退避することができます

ですが、このコマンドだけではindex(またはstage)に上がっておらず追跡されていないものが退避されません。
簡単に言うと、新しく追加したファイルが退避されないということです。

そこで -u オプションです。
-u オプションは「未追跡のものを含む」(include-untracked)のオプション指示です。
これにより、新しく追加したファイルも退避できるようになります。

そして、後から退避した一覧を見た時に、何の退避なのか分かりやすくするためにもメッセージは付けておいた方が良いでしょう。

そのため、このコマンドを覚えておくと良いです。

その他、退避した一覧を表示するコマンドや、再度適用するコマンド等々が必要になるため、関連コマンドも覚えておきましょう

stashを使うために覚えておきたいコマンド

変更内容を一時退避することができるコマンドは「これだけは覚えておきたいstashコマンド」で紹介しました。
また、退避した変更を適用するコマンドやその他退避中の変更の一覧を表示するコマンドもありますので、一気に紹介します。

退避している一覧を表示:stash list

退避している一覧を表示する。

$ git stash list
stash@{0}: On refactor: DB追加
stash@{1}: On refactor: ブロードキャスト機能
stash@{2}: On refactor: トップ画面作成

退避している一覧を変更差分も一緒に表示する。

$ git stash list -p

退避している変更を適用:stash pop,  stash apply

退避している変更を取り出して適用する。

$ git stash apply

退避している変更を取り出して適用する。(退避から消えます)

$ git stash pop

ワンポイント

stash applystash pop は特に指定がない場合 stash@{0} の退避物が対象となります。
もし、対象を指定したい場合は以下のようにすることで可能となります。
※後述する  stash drop も同様です。

$ git stash apply stash@{1}
$ git stash pop stash@{2}

退避している変更を削除:stash drop,  stash clear

退避している変更を削除する。

$ git stash drop

退避している変更を全て削除する。

$ git stash clear

最後に

いかがでしたでしょうか。
これだけ覚えていれば git stash の使い手になれるかと思います。
ぜひ今後活用していってみてください。

タイトルとURLをコピーしました