1

master ブランチには、次のファイルとフォルダーがあります (簡略化)。

C:\Local\TickZoom\Project>ls
file.txt         name.txt      public

パブリック ブランチはベンダー リポジトリを追跡しており、サブツリーは上記のマスター ブランチのパブリック フォルダとしてマージされています。public には 3 つのフォルダーのみがあります (簡略化)。

C:\Local\TickZoom\Project>ls
platform  providers  www

パブリックからマスターに切り替えると、正しく動作します。

ただし、マスターからパブリックに切り替えると、奇妙なことが起こります。両方を組み合わせたすべてのファイルとフォルダーがあります。

C:\Local\TickZoom\Project>git checkout public

C:\Local\TickZoom\Project>ls
file.txt  name.txt   public
platform  providers  www

ただし、gitステータスを確認すると、何も変更されていません。

「git reset --hard」が公開を修正することを発見しました。

手がかり: これは、マスターに新しいコミットを行った後にのみ発生するようです。git はある種の自動マージを行いますか?

「git reset --hard」の後、master へのチェックアウトと public への戻りは、繰り返しても問題なく動作します。

最初は直ったと思っていたのですが、次の変更でまた発生しました。確認のためにもう一度試してみましょう...

今、私はそれを再現することはできません。しかし、それは2回起こりました。

もう 1 つの手がかりは、初めて git reset --hard を実行したときに、ファイルがプロセスによってロックされていると不平を言ったことです。

問題のあるプログラムが閉じられた後、git reset --hard が成功し、2 つのブランチ間でチェックアウトが機能しました。

ファイルがロックされてチェックアウトが混乱し、「黙って」失敗するのでしょうか? 成功を報告してワークスペースがごちゃごちゃになっているだけでなく、 git reset --hard と同じように失敗するのが問題です。

これを回避するために git checkout に設定するその他の知恵やオプションをいただければ幸いです。

ウェイン

4

2 に答える 2

6

以下を使用して、追跡されていないすべてのファイルを消去できます。

git clean -dfx

このコマンドを実行する前に、保持したい追跡されていないファイルが本当にないことを確認してください!

于 2009-11-18T04:54:59.477 に答える
3

これを使って解決

git clean -f -d -X

これにより、.gitignore によって無視されたファイルと、それらを含むすべての空のディレクトリのみが消去されます。

まったく異なるリポジトリからのブランチをチェックアウトする前に、スクリプトでこれを行うようになりました。

同じソフトウェア間でブランチを切り替える場合、これはそれほど問題ではありません。

ウェイン

于 2009-11-18T05:01:34.287 に答える