使い方
変更を退避する。
$ git stash
ステージングした変更を残して退避する。
$ git stash -k
退避した変更のリストを表示する。
$ git stash list
退避した変更をワーキングツリーに戻す。
$ git stash pop
退避した変更をワーキングツリーに適用する。
$ git stash apply
退避した変更を捨てる。
$ git stash drop
参考:
git stash – コミットはせずに変更を退避したいとき – Qiita
git-stash | Git Documentation [Official]
スタッシュからファイルをチェックアウトする
$ git checkout stash@{0} stashed_file.txt
未追跡のファイルを含めて退避する
-u
オプションを使う。
$ git stash -u
退避した未追跡のファイルを確認する。
$ git show stash^3 --name-status
退避した未追跡のファイルを、ファイル名のみ表示する。
$ git ls-tree -r stash^3 --name-only
退避した未追跡のファイルを、強制的にチェックアウトする。
$ git ls-tree -r stash^3 --name-only -z | xargs -0 git checkout stash^3
退避した未追跡のファイルと同じパスのファイルを削除する。(git stash pop
が失敗する場合に強制的に実行可能にする。)
$ git ls-tree -r stash^3 --name-only -z | xargs -0 rm $ git stash pop
参考:
untracked ファイルを含めて stash – Qiita
untracked file も git stash する | risacan.github.io
ステージされてない未追跡な新規ファイルなども退避するやり方 | tweeeety のぶろぐ的めも
How do you stash an untracked file? – Stack Overflow
Is there a way to show untracked stashed files without applying the stash? – Stack Overflow
トラッキングしていないファイルをスタッシュからチェックアウトする
スタッシュは特殊なマージコミットとして格納されていて、3番目の親がトラッキングしていないファイルを含んでいる。
$ git checkout stash^3 -- filename
参考:
How can I checkout an untracked file in a git stash? – Stack Overflow
誤って削除したスタッシュを復活させる
git stash drop
/ pop
で誤って削除したコミットを復活させる。
git fsck
を使うエイリアスを定義する。
$ git config --global \ alias.stash-log \ '!git fsck 2> /dev/null \ | awk "/dangling commit/ {print \$3}" \ | xargs -n 1 \ git -c color.ui=always log -1 \ --date=format:"%Y-%m-%d %H:%M:%S" \ --pretty=format:"%C(green)%cd%C(reset) %C(yellow)%h%C(reset) %s%n" \ | sort -r | cut -d " " -f 1,3-'
定義したエイリアスコマンドを実行する。(日時順ソートで最新の10件を表示する。)
$ git stash-log | head -n 10 2018-06-22 282ebb1 WIP on develop: 67e0ab3 Add hogehoge 2018-06-21 1d94280 WIP on develop: ac18953 Add fugafuga 2018-06-21 0ff070b WIP on develop: 431d6b8 Add piyopiyo 2018-06-21 e9d9263 WIP on develop: 6bcbb9b Add dayo 2018-06-21 7c8365d WIP on develop: 5d73f8e Refactor XYZ 2018-06-21 7a8ee4d WIP on develop: f8dcc21 Add nyaanyaa 2018-06-21 4f7d3aa WIP on develop: f8dcc21 Add wanwan 2018-06-21 43c5cd6 WIP on develop: f8dcc21 Add gyangyan 2018-06-21 e0ede68 WIP on develop: 9741396 Fix desudesu 2018-06-21 2cd9b82 WIP on develop: bab72dc Fix masumasu
参考:
スタッシュをコミットもなしに消してしまった時の対応 – Qiita
一時退避した変更を、誤って消してしまったときの回復法 | t-wada の日記
git-fsck Documentation | Git [Official]
強制的にスタッシュを取り出す
参考:
git stash pop が conflict したとき、強制的に pop させる方法 | yhara.jp
stash から apply や pop ができなくなった時 – Qiita
Force a “git stash pop” | Coderwall
Force git stash to overwrite added files – Stack Overflow
変更を退避してブランチを切り替える
参考:
git switch branch without discarding local changes – Stack Overflow
Checkout another branch when there are uncommitted changes on the current branch – Stack Overflow
git stash -u が .gitignore にあるファイルやディレクトリを削除する
※解決済み (v2.16.2 ~)
バージョン 2.16.2 以降では、git stash -u
は .gitigore
にあるファイルに変更を加えない。
参考:
git stash -u が .gitignore のファイルを削除する | Folioscope
How do you stash an untracked file? – Stack Overflow
stash: don’t delete untracked files that match pathspec · git/git@bba067d – GitHub