git stashでもっと小回りの効いた開発をする

一つの作業中に別の変更作業が発生した時、現在の作業を一旦終わらせるか、現在のブランチからブランチを切ってそちらにコミットするということをしていないか。

この前しったばかりなんだがgit stashというのがあって、これを使えば画期的な方法で変更内容を一時的に保存することができる。GitのGUI管理ツールの先頭にボタンがあったのにスルーして使ってなかったので調べて書いておく。

git stashの使い方

現在の変更を保存

git stash

変更を復元

git stash pop

git stash popは最新の退避データを復元するが、いくつも退避データを保存している場合は中から欲しいデータを取り出すこともできるようだ。そのためにはどの退避データから復元したいかをgit stash listで確認する。

$ git stash list
stash@{0}: WIP on master: e1c6d03 add .ideavimrc
stash@{1}: WIP on master: e1c6d03 add .ideavimrc

add .ideavimrcというのは作業ファイル時にチェックアウトしたところのコミットメッセージだな。重要なのは一番左のstash@{0}とかいうところ、これを使って指定したものを復元できる。

git stash pop stash@{0}

保存したデータは残るので使わずに残っているものはこのように削除

git stash drop

後ろに引数で作業ファイルを指定して削除もできる

実際の使用例

新規ファイルでaddされていないファイルにgit stashは使えない

$ git status
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)
testfile.txt
nothing added to commit but untracked files present (use "git add" to track)

git stashを実行してもローカルの変更は保存できませんでしたと出る

$ git stash
No local changes to save

git addで新規ファイルをaddする

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:   testfile.txt

git statusすると変更がなくなった

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

そしてこのように保存が確認できた

$ git stash list
stash@{0}: WIP on master: e1c6d03 add .ideavimrc

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA