現象
-
git stash -u
とした時に特定のファイルが消滅 -
git stash pop
としても復元されない
状況
git
管理下の以下の構造
.
├── foo.txt
└── hoge
└── bar.txt
.gitignore
の中身
hoge/*
この状態で一度コミット
git add .
git commit -m 'first commit'
操作
foo.txt
を適当に編集して差分を発生させる。
上記の状態でgit stash -u
を実行すると
.
└── foo.txt
となり、hoge
以下のignore
しているものまで消えてしまう。
しかもgit stash pop
しても復元されない。
一連のコマンド履歴
git init
touch foo.txt
mkdir hoge
touch hoge/bar.txt
echo 'hoge/*' > .gitignore
git add .
git commit -m 'first commit'
echo 'diff text' > foo.txt
git stash -u
tree
git stash show
git stash pop
tree
原因
恐らく.gitignore
内の記述の問題かと思われる。
.gitignore
をhoge/*
ではなくhoge/
に書き換えて、他の状態は同じでgit stash -u
をすると
hoge
ディレクトリが消えずに残る。
バグなのか仕様なのか分からないが、git管理外のものがgitの操作で消えるという悲惨な目に合った。
みなさんも.gitignore
とgit stash -u
には気をつけましょう。