質問: Railsのプロジェクトでどの段階でバグが混入したかわからないため古いバージョンの動作確認をしていってるのですが、その際に`Gemfile.lock`が変更されたため、その変更を無視して別のブランチに`checkout`しようとしています。 ですがどうすれば変更をなかったことにして別のブランチに`checkout`できるかがわかりませんでした。 こちらを英語版の回答を参考にして ``` % git stash save --keep-index % git stash drop ``` や ``` git checkout -- . ``` を試してみましたが、 ``` % git checkout xxxxxxx error: Your local changes to the following files would be overwritten by checkout: Gemfile.lock Please, commit your changes or stash them before you can switch branches. Aborting ``` になってしまいます。 どうすれば変更部分をなかったことにしてbranchの切り替えができるのでしょうか。 現在はとりあえずプロジェクト自体を別の場所に一時作業のために`clone`しておいて、その中で`Gemfile.lock`などが変更されてしまった時は適当な名前で`commit`して別のブランチに切り替えています。
回答: 現在のコミットのファイル状態に、 worktree/index を巻き戻したい場合 ``` git reset --hard HEAD ``` をすると、 worktree/index ともに綺麗な状態になって他のブランチの checkout できるようになります。 !!コミットしてない変更は吹き飛びます 追記: stash や checkout で worktree の変更が取り消されなかったのは、 Gemfile.lock が「staging されている状態」= 「index 上に変更後のものが登録されている状態」 = 「`git add` された状態」だったからではなか、と考えられます。 index への変更の登録をやめるには、 `git reset -- Gemfile.lock` を行うと良いです。