6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git stash -uの挙動に注意

Posted at

現象

  • 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内の記述の問題かと思われる。
.gitignorehoge/*ではなくhoge/に書き換えて、他の状態は同じでgit stash -uをすると
hogeディレクトリが消えずに残る。
バグなのか仕様なのか分からないが、git管理外のものがgitの操作で消えるという悲惨な目に合った。
みなさんも.gitignoregit stash -uには気をつけましょう。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?