21220


Railsのプロジェクトでどの段階でバグが混入したかわからないため古いバージョンの動作確認をしていってるのですが、その際に`Gemfile.lock`が変更されたため、その変更を無視して別のブランチに`checkout`しようとしています。

ですがどうすれば変更をなかったことにして別のブランチに`checkout`できるかがわかりませんでした。

こちらを英語版の回答を参考にして

<https://stackoverflow.com/questions/52704/how-do-you-discard-unstaged-
changes-in-git>

[code]

     % git stash save --keep-index
     % git stash drop
    
[/code]

や

[code]

    git checkout -- .
    
[/code]

を試してみましたが、

[code]

     % 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
    
[/code]

になってしまいます。

どうすれば変更部分をなかったことにしてbranchの切り替えができるのでしょうか。

現在はとりあえずプロジェクト自体を別の場所に一時作業のために`clone`しておいて、その中で`Gemfile.lock`などが変更されてしまった時は適当な名前で`commit`して別のブランチに切り替えています。


CC BY-SA 3.0
2016-01-23T06:38:11.020
21217
2016-01-23T10:20:21.977
2017-05-23T12:38:56.467
-1
3271
question
git
gitで変更した内容をなかったことにする


現在のコミットのファイル状態に、 worktree/index を巻き戻したい場合

[code]

    git reset --hard HEAD
    
[/code]

をすると、 worktree/index ともに綺麗な状態になって他のブランチの checkout できるようになります。

！！コミットしてない変更は吹き飛びます

* * *

追記: stash や checkout で worktree の変更が取り消されなかったのは、 Gemfile.lock が「staging
されている状態」= 「index 上に変更後のものが登録されている状態」 = 「`git add` された状態」だったからではなか、と考えられます。

index への変更の登録をやめるには、 `git reset -- Gemfile.lock` を行うと良いです。


CC BY-SA 3.0
2016-01-23T07:47:51.470
21220
2016-01-23T08:05:36.783
2016-01-23T08:05:36.783
754
754
21217
answer