21

元のタイトル: git - 変更されていないすべてのファイルを更新する

現在、変更されていない git リポジトリ内のすべてのファイルを更新しようとしています。たとえば、私が持っているとしましょう:

  • test1.py
  • test2.py

test1.py はローカルで変更されていますが、両方のファイルはリモートで変更されています。今私は試しました:

git stash
git pull
git stash pop

これにより、変更が復元され、マージする必要があるという警告が表示されましたtest1.py。ここまでは順調ですね。同じプロセスをもう一度実行しようとすると(両方のファイルがリモートで再度変更された後)、問題が発生します。Gitは今言う

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state

それは私をちょっと悲しくさせます。変更していないすべてのファイルを更新します。合体は後ほど担当させていただきます。

4

2 に答える 2

27

ファイル内のコンフリクトは解決されましたが (多分? 脚注を参照)、Git はコンフリクトが完了したかどうかを認識していません。その競合の解決が完了したことを git に示す必要があります。(そうでなければ、先に進むことができ、実際に解決していない場合は、あらゆる種類の方法で自分自身を撃つことができます. )

私の知る限り、それを行う方法は次のとおりです。

git add <file>        # stage the resolved version, which marks it as resolved
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree

両方を同時に行う方法があるはずですが、一見したupdate-indexだけではわかりません。(ただし、実際のマージの競合については、コンテンツをステージングせずに競合を解決済みとしてマークしたくはありません。これが発生するのは stash のみです。)

そして、VonC が彼の回答で述べているように、これが再び発生した場合、git status. それらは赤でリストされ(色がオンの場合)、発言しますunmerged(またはdeleted by us/them、削除/変更の競合の場合)。

脚注: あなたの質問を振り返ってみると、競合を修正したかどうかは実際にはわかりません。あなたは「これまでのところとても良い」と言っただけです。あなたが見た「警告」は、競合をすぐに解決するための提案として実際に意図されています。プルした変更と隠した変更を結合しようとしたときに、競合が発生しました。先に進む前に、その競合を解決し、作業ツリーを一貫した状態にする必要があります。マージ競合と同じように対処してください - ファイルを見て、競合マーカーを見つけ、保持するコンテンツを見つけてください! (そして、仕上げ方法については上記を振り返ってください。)

于 2011-05-13T19:08:36.407 に答える
2

これは、マージが未解決であるため、2 番目の stash が機能しないことを意味するはずです。stash で同じエラー メッセージを示す
このSO の質問を参照してください。

このスレッドは、ツリーにマージされていないファイルを含めることができないことを確認しています。

エントリがマージされていないツリーがあります。
問題を調べて解決しませんか?
単純な " git status" は、マージされていないエントリが何であるかを示します。これらのファイルを簡単に見ると、競合マーカーが表示されるはずです。

問題を解決し、コミットして続行します。

于 2011-05-13T19:08:50.673 に答える