gitコマンドの使い方 ~ git stash ~

2020年4月22日git-command

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-command

Posted by snow