【git】 コミットをせずにインデックスにあるファイルを一時退避させる git stash
今の仕事ではルール上いろんなブランチを行き来しながら作業することが多いです。 そんな時よく発生するのが、作業中に急に別ブランチで作業しないといけないみたいな。
しかも作業中で今commitしたくない・・・
そんな時にはgit stashを使います。
まずは新規ファイルを作ってみる
$ touch foo.txt $ git status # On branch test_stash # Untracked files: # (use "git add..." to include in what will be committed) # # foo.txt nothing added to commit but untracked files present (use "git add" to track)
ファイルをaddしてインデックスに追加する
$ git add . $ git status # On branch test_stash # Changes to be committed: # (use "git reset HEAD..." to unstage) # # new file: foo.txt #
ここでついに登場stash まずはヘルプを見てみましょう
Usage: git stash list [] or: git stash show [ ] or: git stash drop [-q|--quiet] [ ] or: git stash ( pop | apply ) [--index] [-q|--quiet] [ ] or: git stash branch [ ] or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [ ]] or: git stash clear
色々あるのですが、よく使う部分でいうと
一時退避、退避したstashを戻す、git stash listで退避したstashを消す。 主にこの辺です。
まずは退避から status見るとインデックスに先ほどのnew fileがあります。
そこでgit stashをすると一時的に退避させることができます。 git stash saveでも良いのですが、省略可能なのでgit stashってしちゃいました。 stashをした後、git statusで確認してみるとnothing to commitになって無事退避できました。
$ git status # On branch test_stash # Changes to be committed: # (use "git reset HEAD..." to unstage) # # new file: foo.txt # $ git stash Saved working directory and index state WIP on test_stash: 9afc620 commit_comment HEAD is now at 9afc620 commit_comment $ git status # On branch test_stash nothing to commit (working directory clean)
次に退避したstashを呼び戻しましょう。 stashした内容はgit stash listで確認ができます。
$ git stash list stash@{0}: WIP on test_stash: 9afc620 commit_comment
一個出てきました。
先ほどstashしたものです。
次は復活です。
復活の方法にはいくつかあります。
|git stash apply stash@{n}|復活!| |git stash pop stash@{n}|復活と同時に復活したstashを削除|
それではapplyしてみましょう。
$ git stash apply stash@{0} # On branch test_stash # Changes to be committed: # (use "git reset HEAD..." to unstage) # # new file: foo.txt #
おかえりfoo.txt
この場合、git stash list で確認をすると先ほどgit stashしたものが残っています。
一緒に消したい場合はpopを使います。
$ git stash pop stash@{0} # On branch test_stash # Changes to be committed: # (use "git reset HEAD..." to unstage) # # new file: foo.txt # Dropped stash@{0} (30903f9efca6c0506e1c1ee452cba459664e7aec) $ git stash list $
お帰りfoo.txtそしてグッバイstash
こんな感じです。
個別にstash を消したい場合は
$ git stash list stash@{0}: WIP on test_stash: 9afc620 commit_comment $ git stash drop stash@{0} Dropped stash@{0} (a7e9d38c119334f11b0ec27b270e452cc3a2c932)
最後にgit stash が貯まってしまって、すべて削除したい場合
$ git stash clear
これをすることによってすべてのstashを削除することができます。
git stashを使ってより良いgit Lifeを!