質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

git stash pop できない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,461
退会済みユーザー

退会済みユーザー

git stash pop

すると 

xxx: needs merge
unable to refresh index


となってしまいます

これはどういう状態なのでしょうか

ファイルの中のコンフリクトは修正したのですがこのメッセージがとれません

追記:

1度コミットしてみたのですが

git stash pop すると 

Auto-merging xxx
CONFLICT (content): Merge conflict

となって再度コンフリクトした状態に戻ってしまいます

git diff stash@{0} をみるとたしかに戻したい状態が保存されているのですが
git stash pop したあともそれが反映されていません

今どういう状態になってるか全くわからないので
とにかく1度 stash したときの状態に強制的に戻したいのですが方法はないでしょうか

以下操作手順です

xxx ファイルを修正してコンフリクトを解消

git add xxx

git commit -m 'tmp commit'

git status 
both modified: がなくなったのを確認

git stash pop
Auto-merging xxx
CONFLICT (content): Merge conflict

git status 
both modified: が復活する

の繰り返しです…

そもそも pop してるのに stash@{0} が消えてないのもよくわかりません

どの情報をみればいいかもわからないので
何かのコマンド結果を出してほしい等あればおっしゃっていただければ随時追記します

追記:

いったんコミットするしかないという回答を頂いたのですが
別質問(https://teratail.com/questions/173339)の回答で stash pop は stash したときのコミットからしかできないらしく
もうこういう状態になったら stash からの復帰はできないということでしょうか

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

こんにちは。

コンフリクトは致命的なエラーではなく、手作業で解消するものです。
Git コンフリクト 解消などとググって、そこらに書いてあることをひたすら読み込んでください。
今後Gitを使っていく上で、マージ作業とコンフリクト解消作業を避けて通ることはできません。
一度やり方を覚えてしまえば後々同様の問題が起きても対処できるようになるので無駄な労力ではありません。


おまけです。
完全にstashした瞬間の状態に戻したい場合は以下の手順で復元できます。stashした以降に加えられた全員の変更は全て破棄されます。

git checkout yourbranch # stashを適用したいブランチをチェックアウト

git stash list # stash一覧から該当のstashを確認 => stash@{n}: WIP on temp: XXXXXXX(コミットID)

git reset --hard XXXXXXX(コミットID) # stash作成時のコミットに移動

git stash pop n # stashを適用

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/13 11:41 編集

    ありがとうございます
    戻せました
    reset というコマンドで強制的に特定のコミットに戻ることができたのですね
    大変困っていたので本当に助かりました

    いつもはコンフリクトがおきるとテキスト上に
    <<<
    A
    <<<
    B
    <<<
    のようになって片方を選んで add commit でマージコミットして解消していたのですが
    今回の場合解消しても pop できずまた conflict 状態に戻るというループから抜け出せなくて困っていました

    キャンセル

0

コンフリクトが発生しています。git statusでコンフリクトしたものをきれいにした上で一旦commitをしないと、stash popできないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/08 14:01

    stash っていうのはコミットせずに一時的に状態を保存して別のブランチに移動するためのものだと認識しているんですが間違っているんでしょうか
    中途半端なコミット履歴はなるべく作らないようにといわれているんですがコミットするしかないんでしょうか…

    キャンセル

  • 2019/02/08 14:04

    おそらく、間違ったブランチでpopしてしまったのでしょう。この場合、stash popでコンフリクトが起き得ます。

    キャンセル

  • 2019/02/08 14:06

    修正内容を別途取っておいて、`git checkout branch1`なりで綺麗な状態に戻した上で作業し直すのが良いかもしれません。

    キャンセル

  • 2019/02/08 16:49

    そうなのですね…
    stash というのは現状が何であっても強制的に stash したときの状態に戻してくれるものという認識だったのですが
    コミットしてたりコンフリクト状態では使えないのですね…

    たぶん他の人がプルリクを送ったときにマージしてるので
    それでコミット履歴がずれてしまったのかもしれないです

    手動で修正内容を戻すことにします
    ありがとうございました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る