Git stash pop-マージが必要、インデックスを更新できない


116

stashと競合しているように見えるブランチをマージしたため、stashをポップできません。現在、stashをポップできないようです。

app.coffee: needs merge
unable to refresh index

誰でもこれを解決する方法を知っていますか?

修繕!

実際の問題が判明したが、マージからの未解決のマージ競合しないでスタッシュは、マージ競合を引き起こすこと。

解決策:競合するファイルをコミットします。


6
受け入れられた回答が複雑であるのは興味深いことですが、実際の解決策は非常に簡単です。競合するファイルをコミットする必要はなく、追加するだけです。
Javi V

3
質問にない回答として回答を追加します。
ブラック

回答:


67

まず、を確認してくださいgit status
OPが言及しているように、

実際の問題は、マージからの未解決のマージ競合でした。スタッシュがマージ競合を引き起こすことはありません。

これは、git statusそのファイルが " both modified" であると言及する場所です

解決策:競合するファイルをコミットします。


4日前のこの回答を書いている時点(2012年3月13日)で、「'マージされていないファイルがあるためプルすることはできません'」という同様の状況を見つけることができます。

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index

マージの競合を修正するために何をしましたか(正しいファイルを編集してコミットします):
Gitでマージの競合を修正するにはどうすればよいですか?参照してください

ブログの投稿者がしたことは:

julita@yulys:~/GNOME/baobab/help/C$ git reset --hard origin/mallard-documentation
HEAD is now at ff2e1e2 Add more steps for optional information for scanning.

つまり、現在のマージを完全に中止して、git stash popを適用できるようにします。
Gitでのマージの中止」を参照してください。

これらは2つのオプションです。


1
別のブランチにいることもあります。たとえば、私はブランチAを持ち、いくつかの変更を加えてブランチBに切り替え、変更を加えてコミットしました。今、私はブランチAに行きたいのですが、Aをチェックアウトしてスタッシュを適用するのを忘れていました。この場合も、同じ問題が発生します。私は上記のケースでこの問題に直面しました。
Kapil Verma 2017年

私はすべてをコミットしましたが、「git bash pop」はそれらの矛盾を取り戻します。現在のバッハに変更を加えたくないのに、なぜコミットする必要があるのか​​わかりません。隠された枝に戻りたいだけです。
フィリップレゴ2018年

@PhilipRego git bash pop?またはgit stash pop?git stashを使用する代わりにstashをチェックアウトしてみてください:stackoverflow.com/a/16625128/6309
VonC

申し訳ありませんが「git stash pop」を意味しました。スタッシュはもう落としましたが、次回この問題が発生したときにそれを試します。ありがとう
フィリップ・レゴ2018年

14

私はこの問題を抱えていた後、競合を解決してコミットし、git stash popもう一度実行すると、同じスタッシュが再び復元されました(同じ競合が発生しました:-()。

私がしなければならなかったこと(警告:最初に保管場所をバックアップしてください)はgit stash dropそれを取り除くことです。


4
それは私の隠し場所を取り除きました。私はそれに戻りたかったです。
Philip Rego

3
これは私が必要とした答えですが、これを見る他の人にとって、隠された変更を失うでしょう。これは、最初の隠し場所で問題が発生しているが、最初の隠し場所を取り除き、より深い第2レベルの隠し場所の変更を適用したい場合に役立ちます。
Corey Schnedl、

8

受け入れられた答えよりもはるかに単純です。必要がある:

  1. そのgit status下のマージされていないパスを確認します。競合を修正します。後で行う場合は、この手順をスキップできます。

  2. マージされていないパスの下にあるこれらすべてのファイルを、を使用してインデックスに追加しますgit add <filename>

  3. さあgit stash pop。競合が発生した場合は、これらを再度解決する必要があります。


6
これは何度も何度も同じ紛争につながります。
NaN

7

これが私が問題を解決した方法です:

  • git status(以前のstash、pull、stash pop、および継続中の作業からのファイルの混合を参照してください。)
  • git stash(ニーズのマージの問題を参照)
  • git add。(私の仕事がローカルで自分のマージを解決するようにファイルを追加します)
  • git stash(エラーなし)
  • git pull(エラーなし)
  • git stash pop(エラーなしで作業を続行)

1
どうも !これは私を助けます。
Julien Baldy

1
優秀な、git add .私のための修正に問題をコミットせず。
ポールカールトン

5

マージ/競合/アクション以外でこの問題が発生している場合、問題の原因となっているプロジェクトのgitロックファイルである可能性があります。

git reset
     fatal: Unable to create '/PATH_TO_PROJECT/.git/index.lock': File exists.
rm -f /PATH_TO_PROJECT/.git/index.lock
git reset
git stash pop

1
resetコマンドを恐れるようなもの。これが機能する理由を説明していただけますか?
SMBiggs

1

私は最良の解決策はあなたの隠し場所を分岐し、後で解決することだとわかりました。

git stash branch <branch-name>

隠し場所を落とすと、変更が失われる可能性があり、reflogに戻る必要があります。


1

app.coffeeステージングに追加する必要があります。

いますgit add app.coffee(コミットしてプッシュした後、その)、その後、あなたはあなたのスタッシュを適用することができるようになります。


0

stashはすでに他のファイルに適用されています。

app.coffee手動でマージする必要があるだけです。その後、ただ走る

git reset

変更のステージを解除してハッキングを続けます。


0

開発ブランチでいくつかの変更を行った後、プロファイルブランチに移動したいので、同じ問題に直面していました。だから私は変更を隠しておく

git stash

次に、プロファイルブランチでいくつかの変更を加えた後、再び開発に戻りたいので、変更を再び隠しておく必要があります

 git stash

しかし、ブランチを開発するようになり、gitでスタッシュの変更を試みたとき

git stash apply

だから私はエラーがマージを必要としていた

この問題を解決するには、まずスタッシュリストを確認する必要があります

git stash list

つまり、私の場合はスタッシュのリストが表示されます。スタッシュが2つあった場合、スタッシュの名前は次のように表示されます

stash @ {1}からの変更が必要なので、このコマンドで取得しようとすると

git stash apply stash@{1}

エラーが発生してマージが必要でした

この問題を解決するには、ファイルのステータスを確認してください

git status

したがって、この実行を解決するために「両方が変更された」というエラーが発生していました

git add .

不足している変更されたファイルを追加し、ステータスを再度確認します

git status 

だから今はエラーはなく、スタッシュを適用できます

git stash apply stash@{1}

このプロセスは、任意の数のstashファイルに対して実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.