1481
1295

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitAdvent Calendar 2012

Day 19

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

Last updated at Posted at 2012-06-20

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を使えるようになるには、読んでわかった気になる前に手を動かして、コマンドが馴染んでくるまで何回も素振りをするのが近道だと思ってます。

1481
1295
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1481
1295

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?