web-dev-qa-db-ja.com

git subtree pullは、作業ツリーに変更があることを示していますが、gitstatusは変更がないことを示しています。何が得られますか?

リポジトリの1つでこれを行う場合:

git subtree pull --prefix=frameworks/AquaticPrime --squash AquaticPrime

私はこれを得る:

Working tree has modifications.  Cannot add.

私がこれを行う場合(もちろん同じ場所で):

git status

私はこれを得る:

# On branch master
nothing to commit (working directory clean)

ここで何が起こっているのかよくわかりません。 git statusコマンドは、変更がないことを意味するため、gitサブツリーpullは、サブツリーに関連する別のブランチの変更を参照していると想定していますが、完全には明確ではありません。

誰かが悟りを提供できますか?

29
Sam Deane

私はちょうど同じ問題を抱えていました。 GITソースから、コマンドgit diff-index HEADが結果を返すと、git statusが作業ツリーがクリーンであると言っていても、エラーがスローされます。

このエラーを回避するために、私の場合、作業ツリーの現在のブランチを再チェックアウトしましたが、すべて問題ないようです:git checkout <branch>

少し混乱していますが、誰かが理由を説明できれば...

28
Koryonik

私は今これを回避しました。私の問題は、リポジトリが真新しいように思えました。私はリポジトリに何もコミットしたことがありませんでした。ファイルをリポジトリにコミットすると、このエラーを乗り越えることができました。

ただし、コマンドgit subtree add C:\gitTest\repos\subA -d --prefix subAを使用すると、新しいエラーが発生しました。

fatal just how do you expect me to merge 0 trees?

少しいじった後、特定のリビジョンを渡す必要があることがわかりました。したがって、このコマンドは成功したようです。

git subtree add C:\gitTest\repos\subA HEAD -d --prefix subA

そして明らかに、-dデバッグフラグは必要ありません。

12
B T

git reset --hard修正しました

git reset --helpから

--hardインデックスと作業ツリーをリセットします。作業ツリー内の追跡ファイルへの変更は破棄されます。

3
Anssi

私がこの問題を抱えていたのは、次の場合です。

  • サブツリーを追加しました。
  • 気付いたのですが、間違って(間違ったディレクトリに)追加しました。
  • rmで削除しました。
  • もう一度(正しい場所に)インポートしようとしました。

puppet diffは-正しく-何も表示せず、git diff-index HEAD削除したばかりの各ファイルを「削除済み」としてリストしました。ただし、コミットしたことはありません(プッシュされたことはありません)。

これはgitのバグだと思います(ここでは2.7.0を使用)...バグかどうかにかかわらず、回避策はany他のブランチ(通常のgit checkout ....)そしてあなたのところに戻ります。元の質問者でなくても、これが誰かの助けになることを願っています。

1
Mikhail T.

Windowsを使用している場合は、PowerShellまたはcmd.exeの代わりにGitBashを使用してみてください。これで私の場合の問題は修正されました。

0
noobar