[解決済み] Gitで落としたスタッシュを復元する方法とは?
質問
をよく使います。
git stash
と
git stash pop
を使用して、私の作業ツリーの変更を保存および復元します。昨日、私の作業ツリーにいくつかの変更をため込んでポンと置いたのですが、その後、さらに作業ツリーに変更を加えました。昨日の隠した変更を戻って確認したいのですが
git stash pop
は、関連するコミットへの参照をすべて削除しているように見えます。
を使用する場合、私はそれを知っています。
git stash
では
.git/refs/stash には
は、stash を作成するために使用されたコミットの参照です。また
.git/logs/refs/stash には以下のものが含まれます。
は、隠し場所全体です。しかし、これらのリファレンスは
git stash pop
. そのコミットがまだ私のリポジトリのどこかにあることは知っていますが、それが何であったかはわかりません。
昨日のstashのコミット参照を簡単に復元する方法はありますか?
なぜなら、私は毎日バックアップをとっており、昨日の作業ツリーに戻って自分の変更を取得することができるからです。もっと簡単な方法があるはずなので、質問させていただきました。
解決方法は?
落としたスタッシュコミットのハッシュが分かれば、それをスタッシュとして適用することができます。
git stash apply $stash_hash
あるいは、そのための別のブランチを
git branch recovered $stash_hash
あとは、通常のツールで好きなことをすればいい。終わったら、枝を吹き飛ばせばいいんです。
ハッシュを探す
ポチったばかりで、端末がまだ開いている場合は、以下のようになります。
で出力されるハッシュ値が残っています。
git stash pop
画面上
(Doldaさん、ありがとうございます)。
その他、Linux、Unixではこれを使って、WindowsではGit Bashを使って見つけることができます。
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
...または、WindowsのPowershellを使用します。
git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }
これは、コミットグラフの先端にある、どのブランチやタグからも参照されなくなったコミットをすべて表示します。これまでに作成したすべての stash コミットを含め、失われたコミットはこのグラフのどこかにあるはずです。
欲しいスタッシュコミットを見つける最も簡単な方法は、おそらくこのリストを
gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
...または、以下を参照してください。 エムラジンからの回答 Windows版Powershellを使用している場合。
リポジトリブラウザが起動し、次のように表示されます。 リポジトリにあるすべてのコミット 到達可能かどうかに関係なく。
を置き換えることができます。
gitk
を次のように変更します。
git log --graph --oneline --decorate
もし、別のGUIアプリよりもコンソール上の美しいグラフを好むなら。
stashコミットを見つけるには、このようなコミットメッセージを探してください。
のWIP somebranch : commithash いくつかの古いコミットメッセージ
備考
: を実行したときにメッセージを指定しなかった場合、コミットメッセージはこの形式("WIP on"で始まる)にのみなります。
git stash
.
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】マージの競合が発生した git stash pop の取り消し
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
git commit リモートエラー [rejected] master -> master (フェッチファースト)
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] 未追跡のファイルを保存する方法を教えてください。
-
[解決済み] コミットされていない変更を保存したまま復元する方法
-
[解決済み] ステージングされていないファイルのチェックアウトをgitが取り消すことができる