2

これが私の状況です
。ブランチ b1 で作業しているとします。ファイル dir/f1 を書き込みます。
次に、dir/f1 のコードを dir/f2 に統合したいので、f1 はもう必要ありません。
ランダムな理由で、f1 を維持したいと考えています。
バージョン管理から削除しましたが、追跡されずにまだここにあります。
ブランチ b2 に切り替えると、f1 は b2 と同期していないため、コンパイル エラーが発生します。
そこで、切り替える前に b1 で git stash -u を実行して、b2 での作業が完了したときにコンテキストを元に戻すことにしました。
ほぼ期待どおりに動作します: 作業ディレクトリがクリーンアップされ、すべて (追跡されたファイルと追跡されていないファイル、ただし -a を使用しなかったため無視されたファイルはありません) が隠され、git stash でそれらを適用できます。
唯一の問題は、一部のファイルが作業ディレクトリから削除されていることですが、他のファイルは削除されていません。メッセージは次のとおりです。

Not removing dir/f1

だから私の質問は、そのような行動の理由は何ですか? stash 中に削除するファイルとそうでないファイルを git はどのように決定しますか?

ありがとう

4

1 に答える 1

1

このような動作は、ディレクトリgit 1.7.7.xである場合にのみ可能であるようです。dir/f1

git stash -ugit clean作業ディレクトリからファイルを削除するために使用します。git のソース コードによると、メッセージでgit clean応答できる唯一のケースは when is a directory です。本当にファイルでしたか?Not removing dir/f1dir/f1dir/f1

git 1.7.8(具体的にはこの commit で)から、 にオプションgit stash -uが渡されるので、このような問題は発生しなくなります。-dgit clean

于 2012-08-10T13:34:20.580 に答える