git stash使いこなせていますか?
stash
コマンドはかなり便利だと思うのですが、あまり使い方がわかっていないので、今回はstashコマンドについてまとめてみようと思います。
git関連の記事
git stashとは?
一言で言うと一時的な変更退避
を行うことができます。
コミットされていない変更差分を退避させることができます。
git stashを使うケース
1.作業中に別ブランチで作業したい
例えば、別ブランチに移動して作業をしたい場合に、コードが完全に書き終えることができておらず、コミットせずに作業をしたいとなった場合にstashコマンドを使用します。
2.バグ対応
バグの修正対応が迫られた際に、作業中の内容を退避させる時に使います。
3.バックアップとして取っておきたいとき
複数のコードの書き方があって悩む時に使えます。
stashコマンドで退避させておくことで、別の書き方で書いたら動かなくなってしまったというケースに対応できます。
使用方法
変更の一時的な退避
下のコマンドで以下のファイルをstashさせることができます。
- ステージングされたファイル
- 追跡済みのファイル
git stash
未追跡(Untracked
)のファイルの場合は-uオプションでstashします。
git stash -u
addコマンドでステージングされたファイルを除外したい場合は、-kを使用します。
git stash -k
saveコマンドを使うとstashさせた履歴に説明をつけることができます。
git stash save "memo"
一覧
stashさせたものの一覧は次のように確認します。
git stash list
下のように表示されます。
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させたものの変更ファイルの一覧を確認するには、showコマンドを使用します。
git stash show stash@{2}
ソースコードなどのファイルの内容も見るには-p
を使用します。
git stash show stash@{2} -p
stashの復元
復元にはapply
とpop
コマンドを使います。
applyコマンドを使うと最新のstashされた履歴が復元されます。
git stash apply
特定の履歴を復元したい場合は、list
から確認してインデックス番号を指定します。
git stash apply stash@{2}
もしstashさせたものを適応させた後、その履歴を削除したい場合はpopコマンドを使用します。
git stash pop
こちらも特定の履歴から戻すには、下のように指定します。
git stash pop stash@{2}
ただこれらのコマンドはコミットせずステージングしていたものを、ステージングから外してしまいます。
ステージングさせたままにしたい場合は--index
を使用します。
git stash apply --index
履歴の削除
dropコマンドで最新のstashさせた内容を捨てることができます。
git stash drop
特定のstashに対して行うにはpop等と同じようにstashを指定します。
git stash drop stash@{2}
全てを捨てるにはclearコマンドを使います。
git stash clear
変更した内容をブランチで復元する
branchコマンドでstashした内容を新しいブランチとして復元できます。
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を新しいブランチで復元 |