あるブランチで作業中だけど、急遽別の対応をしないといけなくなった。
未コミットの変更が作業ディレクトリやステージングエリアに残っている場合、それがもしチェックアウト先のブランチと衝突する内容ならブランチの切り替えはできません。
しかし、作業が中途半端なのでコミットはしたくない・・・
そのような時にはgit stashコマンドが便利です!
git stashコマンドは、コミットしていない変更をコミットしないまま一時的に隠すことにより、作業を中断することができます。そして別の対応が終わったら、隠しておいた変更をブランチに戻して作業を再開することができるのです。
この記事ではgit stashコマンドについてまとめました。参考になりましたら幸いです。
Gitでコミットしないまま変更を隠す
コミットしないまま変更を隠すには以下のようにgit stashコマンドを使います。
このコマンドにより作業ディレクトリやステージングエリアにある変更を隠すことができます。
$ git stash -u -m "任意のメッセージ"
任意のメッセージには、中断する作業の一言メモなどが良いでしょう。作業を再開する時に役に立ちます。
隠した変更を確認する
隠した変更を確認するには以下のコマンドを使います。
このコマンドにより隠した変更を新しい順に一覧で確認することができます。
$ git stash list
stash@{0}: WIP on main: xxxxx
stash@{1}: WIP on main: xxxxx
1行が1回分の隠した変更になります。stash@{n}
がスタッシュ番号です。(0が直近の変更)WIP on
のあとはブランチ名で、xxxxxはstashしたときの任意のメッセージが表示されます。
中断した作業を再開する
中断した作業を再開するには以下のコマンドを使います。
このコマンドにより隠しておいた変更が、現在のブランチ(stash時のブランチと異なってもOK)に戻り作業を再開できます。
$ git stash apply 再開する変更のスタッシュ番号 --index
なお、スタッシュ番号を指定しない場合は、直近に隠した変更に戻ります。
隠しておいた変更情報を削除する
隠しておいた変更を現在のブランチに戻しても、変更情報は残ったままです。
ので、現在のブランチに戻した後にもう必要ないのなら変更情報は削除しておきましょう。
隠しておいた変更情報を削除するには以下のコマンドを使います。
$ git stash drop 削除する変更のスタッシュ番号
なお、スタッシュ番号を指定しない場合は、直近に隠した変更情報が削除されるので注意が必要です。
隠しておいた変更情報を一気に全部削除するには以下のコマンドを使います。
$ git stash clear
作業の再開と変更情報の削除を同時に行う
以下のコマンドで「作業の再開」と「隠しておいた変更情報の削除」が同時に行えるので覚えておくと便利です。
$ git stash pop 再開と削除を行うスタッシュ番号
なお、スタッシュ番号を指定しない場合は、直近に隠した変更の再開と削除を同時に行います。
まとめ
今回紹介したgit stashコマンドを表にまとめました。
コマンド | 説明 |
---|---|
git stash -u -m “任意のメッセージ” | コミットしないまま作業を中断する |
git stash list | 隠した変更情報を確認する |
git stash apply 再開する変更のスタッシュ番号 –index | 中断した作業を再開する |
git stash apply –index | 中断した直近の作業を再開する |
git stash drop 削除する変更のスタッシュ番号 | 隠しておいた変更情報を削除する |
git stash drop | 直近に隠した変更情報を削除する |
git stash clear | 隠しておいた変更情報を全部削除する |
git stash pop 再開と削除を行うスタッシュ番号 | 作業の再開と隠しておいた変更情報の削除を同時に行う |
git stash pop | 直近に隠した作業の再開と変更情報の削除を同時に行う |
その他のgit stashコマンド
https://git-scm.com/docs/git-stash
以上がコミットしないまま作業を中断する方法でした。
参考サイト
https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業の隠しかたと消しかた