gitコマンドの使い方 ~ git stash ~
目次
git stash コマンド概要
stashとはcommitを作成する前の変更内容を一時保存するコマンドです。
stashのリスト表示
git stash list
作成したstashを一覧で表示します。
(master)
$ git stash list
stash@{0}: On master: stash test
stash@{1}: WIP on master: ef0bed4 commit-C
stashの詳細表示
git stash show
git stash show [stash]
指定したstashの情報を表示します。
stashを指定しない場合はstash@{0}がデフォルト値となる
(master)
$ git stash list
stash@{0}: On master: ccc add stash comment
stash@{1}: On master: stash test
stash@{2}: WIP on master: ef0bed4 commit-C
(master)
$ git stash show
file-C.txt | 1 +
1 file changed, 1 insertion(+)
(master)
$ git stash show stash@{0}
file-C.txt | 1 +
1 file changed, 1 insertion(+)
(master)
$ git stash show stash@{1}
file-B.txt | 1 +
1 file changed, 1 insertion(+)
stashの作成(待避)
git stash
git stash push
現在の変更分をcommitせずに一時退避します。
stashでサブコマンドを指定しない場合、デフォルトのサブコマンドがpushになります。
staging-area(ステージングエリア)に存在しないファイルは退避されません。
言い換えると新規作成したファイルでgit addしていないファイルは退避されないということです。
(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt
(master)
$ echo 'aaa' >> file-A.txt
(master)
$ git add .
(master)
$ git stash
Saved working directory and index state WIP on master: ef0bed4 commit-C
(master)
$ git stash show
file-A.txt | 1 +
1 file changed, 1 insertion(+)
-u オプション
git stash push -u
-uオプションを指定するとstaging-area(ステージングエリア)に追加されていないファイルもstashの対象とすることができます。
(master)
$ git stash list
(master)
$ git ls-files
file-A.txt
file-B.txt
file-C.txt
(master)
$ echo 'ddd' > file-D.txt
(master)
$ git stash push -u
Saved working directory and index state WIP on master: ef0bed4 commit-C
(master)
$ git stash list
stash@{0}: WIP on master: ef0bed4 commit-C
-m オプション
git stash push -m 'comment'
-mオプションを指定するとstashにコメントを付けることができます。
(master)
$ echo 'aaa' >> file-A.txt
(master)
$ git add .
(master)
$ git stash push -m 'aaa add stash comment'
Saved working directory and index state On master: aaa add stash comment
(master)
$ git stash list
stash@{0}: On master: aaa add stash comment
stashの取出し
git stash apply [stash]
指定したstashを戻します。
以下の例は、「file-D.txt」を追加した状態でstashを作成し、applyで戻しています。
(master)
$ ls
file-A.txt file-B.txt file-C.txt
(master)
$ echo 'ddd' > file-D.txt
(master)
$ git stash push -u -m 'file-D add'
Saved working directory and index state On master: file-D add
(master)
$ git stash list
stash@{0}: On master: file-D add
(master)
$ ls
file-A.txt file-B.txt file-C.txt
(master)
$ git stash apply stash@{0}
Already up to date!
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
file-D.txt
nothing added to commit but untracked files present (use "git add" to track)
(master)
$ ls
file-A.txt file-B.txt file-C.txt file-D.txt
stashの削除
git stash drop [stash]
指定したstashを削除します。
(master)
$ git stash list
stash@{0}: On master: file-D add
stash@{1}: On master: aaa add stash comment
stash@{2}: WIP on master: ef0bed4 commit-C
(master)
$ git stash drop stash@{2}
Dropped stash@{2} (7b3e5f8e43f0601b86f1957298e6bda199369f6c)
(master)
$ git stash list
stash@{0}: On master: file-D add
stash@{1}: On master: aaa add stash comment
stashの取出しと削除を同時に実行
git stash pop [stash]
指定したstashを戻します。
また、戻したstashを同時に削除します。
applyとdropを同時に行うコマンドです。
(master)
$ git stash list
stash@{0}: On master: file-D add
stash@{1}: On master: aaa add stash comment
(master)
$ echo 'eee' > file-E.txt
(master)
$ ls
file-A.txt file-B.txt file-C.txt file-D.txt file-E.txt
(master)
$ git stash push -u -m 'file-E add'
Saved working directory and index state On master: file-E add
(master)
$ ls
file-A.txt file-B.txt file-C.txt file-D.txt
(master)
$ git stash list
stash@{0}: On master: file-E add
stash@{1}: On master: file-D add
stash@{2}: On master: aaa add stash comment
(master)
$ git stash pop stash@{0}
Already up to date!
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
file-E.txt
nothing added to commit but untracked files present (use "git add" to track)
Dropped stash@{0} (35f1ddff26c31536ce3408a229326e356974fe56)
(master)
$ git stash list
stash@{0}: On master: file-D add
stash@{1}: On master: aaa add stash comment
stashを全て削除
git stash clear
全てのstashを削除することができます。
全てのstashを削除する場合はdropで1つ1つ削除するよりも便利です。
(master)
$ git stash list
stash@{0}: On master: file-D add
stash@{1}: On master: aaa add stash comment
(master)
$ git stash clear
(master)
$ git stash list
git stash の全てのオプションを確認する方法
以下のコマンドを実行するとブラウザでgit stashのヘルプページが表示される
git stash --help
Gitコマンドの使い方一覧
Git設定
ログ&設定値確認
ステージングエリアの操作
ローカルリポジトリの操作
commitのエイリアスなど
commitの内容をステージングエリアや作業ディレクトリに反映