6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git stash使いこなせていますか?

stashコマンドはかなり便利だと思うのですが、あまり使い方がわかっていないので、今回はstashコマンドについてまとめてみようと思います。

git関連の記事

git stashとは?

一言で言うと一時的な変更退避を行うことができます。

コミットされていない変更差分を退避させることができます。

git stashを使うケース

1.作業中に別ブランチで作業したい

例えば、別ブランチに移動して作業をしたい場合に、コードが完全に書き終えることができておらず、コミットせずに作業をしたいとなった場合にstashコマンドを使用します。

2.バグ対応

バグの修正対応が迫られた際に、作業中の内容を退避させる時に使います。

3.バックアップとして取っておきたいとき

複数のコードの書き方があって悩む時に使えます。
stashコマンドで退避させておくことで、別の書き方で書いたら動かなくなってしまったというケースに対応できます。

使用方法

変更の一時的な退避

下のコマンドで以下のファイルをstashさせることができます。

  • ステージングされたファイル
  • 追跡済みのファイル
git
git stash

未追跡(Untracked)のファイルの場合は-uオプションでstashします。

git
git stash -u

addコマンドでステージングされたファイルを除外したい場合は、-kを使用します。

git
git stash -k

saveコマンドを使うとstashさせた履歴に説明をつけることができます。

git
git stash save "memo"

一覧

stashさせたものの一覧は次のように確認します。

git
git stash list

下のように表示されます。

zsh
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

履歴に残さずstashしたい場合

単なるstashコマンドだけだと履歴として残ってしまいますが、createコマンドを使用すると履歴に残さずにstashすることができます。

git
git stash create "message"

これを使うとハッシュ値として返してくれます。

これをstoreコマンドを使うことでstashの履歴として残せます。

git
git stash store -m "作業中の変更" <hash>

あまりこの方法は使わないような気がしてます。

変更の詳細を確認する

stashさせたものの変更ファイルの一覧を確認するには、showコマンドを使用します。

git
git stash show stash@{2}

ソースコードなどのファイルの内容も見るには-pを使用します。

git
git stash show stash@{2} -p

stashの復元

復元にはapplypopコマンドを使います。

applyコマンドを使うと最新のstashされた履歴が復元されます。

git
git stash apply

特定の履歴を復元したい場合は、listから確認してインデックス番号を指定します。

git
git stash apply stash@{2}

もしstashさせたものを適応させた後、その履歴を削除したい場合はpopコマンドを使用します。

git
git stash pop

こちらも特定の履歴から戻すには、下のように指定します。

git
git stash pop stash@{2}

ただこれらのコマンドはコミットせずステージングしていたものを、ステージングから外してしまいます。
ステージングさせたままにしたい場合は--indexを使用します。

git
git stash apply --index

履歴の削除

dropコマンドで最新のstashさせた内容を捨てることができます。

git
git stash drop

特定のstashに対して行うにはpop等と同じようにstashを指定します。

git
git stash drop stash@{2}

全てを捨てるにはclearコマンドを使います。

git
git stash clear

変更した内容をブランチで復元する

branchコマンドでstashした内容を新しいブランチとして復元できます。

git
git stash branch <branch_name>

まとめ

stashを使うことで変更を退避して、安全に自分が行った変更を保持しながら作業することができます。

今回紹介したコマンド一覧は下のようになっています。

コマンド 機能
stash ステージング・追跡済みのファイルの変更を退避
stash -u 未追跡のファイルの変更を退避
stash -k ステージングされたファイル以外の変更を退避
stash save stashにメッセージをつけて保存
stash list stashの一覧
stash show stashのファイル一覧確認
stash show -p stashしたファイルの中身確認
stash apply 最新のstashを復元
stash apply 特定のstashを復元
stash apply --index ステージングさせたままstashを復元
stash pop 最新stashを復元し、履歴から削除
stash pop 特定のstashを復元し、履歴から削除
stash drop 最新のstashを削除
stash drop 特定のstashを削除
stash clear すべてのstashを削除
stash branch stashを新しいブランチで復元
6
3
0

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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?