0

コミットされていない変更を含むプロジェクト フォルダーのバックアップを手動で作成し、「コミットされていない変更を元に戻す」を呼び出しても、git stash が失敗することがあります。

これは、たとえば、foo.cppプロジェクトに新しいファイルを追加した場合に発生します。後で変更を隠したい場合、エラーが発生します。これは、Qt Creator のバージョン管理出力ペインからのものです。

14:07 Executing in C:\MyProject: git.exe add --intent-to-add foo.cpp
14:07 Executing in C:\MyProject: git.exe stash save QtCreator 2013-02-05T14:07:18
Cannot stash in "C:\MyProject": error: Entry 'foo.cpp' not uptodate. Cannot merge.
Cannot save the current worktree state

このプロセスを自動化するのが git stash のポイントではありません。変更を元に戻すだけで成功するのに、なぜ失敗するのでしょうか?

4

2 に答える 2

2

--intent-to-addfoo.cpp追加されていませんが、まだ追跡されている状態のままです。(Do git cat-file -p $(git write-tree): foo.cpp は、正しく、そこにはありません。Do git status: 追跡されています。しかし、誰もgit stashそれを覚えておくように教えられていないと思います。その結果、保存された状態をマージすると、foo.cpp追跡されないままになります。git stash pop実際には、インデックスにマージされ、ワークツリー -- 現在の HEAD を親として変更をスタッシュし、他のものを完全にチェックアウトしてgit stash popから、スタッシュされたコンテンツの変更をその新しいワークツリーに適用できます -- 表示されているメッセージはテスト フライトからのものですmergestashを実行して、immediategit stash popがワークツリーとインデックスをそのまま残すことを確認しますが、この場合はそうではありません。 foo.cppインデックスで追跡され、隠しツリーにはありません。そのツリーにマージするとき (追加するデータがない場合)、行うべき唯一の正気のことは、それを削除として解釈することです。しかし、追跡するように依頼したファイルに変更を加えました。merge は、重要だと git に伝えたコンテンツが失われることを確認できます。そのため、ファイルを自分で削除するかリポジトリにコミットするまでマージは実行を拒否し、stash は安全にポップできない stash の作成を拒否しています。

于 2013-02-06T03:51:24.663 に答える
0

git stash save -uの代わりに実行してみてくださいgit stash

于 2013-02-05T10:21:45.300 に答える