変更を一時的に退避!キメろgit stash

  • 742
    Like
  • 1
    Comment
More than 1 year has passed since last update.

gitは、とにかくトピックブランチを作成して作業する。だいたい機能追加とかバグ修正とかの単位でブランチを作って作業します。(ちゃんとやってますよね?)
なので、作業の途中で別の修正を優先してお願いっ!なんて言われたときは、別のブランチに切り替えて作業をする必要がでてくる。そんな時に変更を一時的に退避しておくことのできる機能、それがstashである。
では、早速使い方
まだcommitしていない状態の変更ファイル(addしてる or add していない)が存在する状況で、次のコマンドを実行すると変更ファイルを退避することができる。

 $ git stash save

※saveは、省略することもできる。

これでファイルの退避完了!git statusとか見てみると変更状態であったファイルがなくなっている。この状態なら安心してブランチを切り替えることもできる。めでたしめでたし。
と、退避だけならこれで終わりだけど、次につかうときに変更ファイルを取り出したい。

  • いまどんな変更を退避しているかを確認

2つの変更を保存している状態(2回stashを行った状態)

 $ git stash list
 stash@{0}: WIP on sub: a0d2f1b add fourth line
 stash@{1}: WIP on sub: 1a61919 add second line
<stash名>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>

※ハッシュ、コミットコメントはstashを行った時のHEADのもの

次のようにすると、さらに変更内容もみれるので便利!(git logのオプションが使える)

 $ git stash list -p
  • さらに各変更について詳しく見たい場合、変更内容に含まれるファイルの一覧が見れる。
 $ git stash show <stash名>
  • 復活させたいstash名がわかったら次のコマンドで取り出すことができる。
 $ git stash apply stash@{0}
  • stash applyで変更を復活した場合は、stashリストのなかに復活済みの変更が残されているこれを削除するには、次のコマンドを使用する。
 $ git stash drop <消したいstash名>
  • 変更の復活と、削除を同時に行う。
 $ git stash pop stash@{0}

stashが溜まってくると、なんの変更だったか、どれが必要な変更だったかわからなくなるのでこまめに消
したり管理するのが大切ですよー

応用

git apply で、変更を復活して適用したんだけど、やっぱやめとこうってときにこんなこんなやりかたで取り消せます。前半はgit stash show -p でパッチ形式で出力、それをgit apply -Rでパッチを逆に適用しています。

 $ git stash show <適用したstash名> -p | git apply -R

終わりに

とっても基礎的なこと書いたけど、とりあえずgitを使えるようになるには、読んでわかった気になる前に手を動かして、コマンドが馴染んでくるまで何回も素振りをするのが近道だと思ってます。