web-dev-qa-db-ja.com

失われたgit stashの変更

だからここに何が起こったかです:私はブランチ「A」にいて、そのブランチでGitスタッシュを行いました次に、別のブランチ「B」に切り替えました。私はブランチ 'A'に戻りましたが、Gitスタッシュポップをしませんでした。マスターブランチに切り替えてから、ブランチ「A」に戻りました。今gitstash popを実行しようとしていますが、変更を元に戻せないようです。そのコードを回復する必要がありますが、git stash popを実行すると、ファイルの変更が一覧表示されません。コードをコミットしませんでした。

行った変更を復元する方法はありますか?この点で本当に助けていただければ幸いです。

26
nids

隠し場所は、

git stash list

または

gitk --all

また、git stashは追跡されていないファイルを隠しません。あなたがこれをし、その後git checkout --force別のブランチの追跡されていないファイルを別のブランチの追跡されたファイルで上書きすると、そのコンテンツが失われます。隠しておくための推奨される方法は

git stash -u

これにより、このタイプの損失を防ぐことができます。

16
Adam Dymitruk

私たちも同じ問題に直面しました。したがって、失われた変更を回復する方法は次のとおりです。

  1. ブランチBに戻ります。

    gitチェックアウトB

  2. git reflogオプションを使用して、reflog情報を管理します。

    git reflog --all

    出力:

    f332d5c refs/stash @ {0}:BのWIP:aa1d0c1 xyzコミットメッセージ

  3. 次に、git checkout Aを使用してブランチAに切り替えます。

  4. 最後に、失われた変更を回復します。

    git stash apply f332d5c

25
Puneet Behl

同様のことが私にも起こりました。つまり、誤って新しいファイルを他のブランチにプッシュしていないことを確認してください。

これが私に起こったことです:私は自分のものを隠し、ホットフィックスを素早く行うために「dev」から「master」に切り替えました。修正プログラムをマスターにプッシュしたとき、開発用の新しいファイルをマスターブランチに追加したことにも気付きませんでした。スタッシュにそれらのファイルが含まれていることも想定していました。

1
JohnnyFun