git subtree pull говорит, что у рабочего дерева есть модификации, но git status говорит, что его нет. Что дает? - PullRequest
26 голосов
/ 02 сентября 2010

Если я сделаю это в одном из моих репозиториев:

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 относится к модификациям в другой ветви, связанной с поддеревом, но это не совсем ясно.

Может кто-нибудьобеспечить просветление?

Ответы [ 6 ]

26 голосов
/ 04 сентября 2013

У меня просто была такая же проблема. Из источника GIT выдается ошибка, когда команда git diff-index HEAD возвращает результат, даже если git status говорит, что рабочее дерево чистое.

Чтобы избежать этой ошибки, в моем случае я повторно извлекаю текущую ветку рабочего дерева, и все выглядит нормально: git checkout <branch>

Это немного запутано, но если кто-то может объяснить, почему ...

12 голосов
/ 28 мая 2013

Я обошел это сейчас. Мне показалось, что проблема в том, что хранилище было совершенно новым: я никогда ничего не делал для этого. После того, как я отправил файл в репозиторий, я смог обойти эту ошибку.

Однако, используя команду 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 debug.

3 голосов
/ 19 августа 2016

git reset --hard исправил это мне

С git reset --help

- hard Сбрасывает индекс и рабочее дерево.Любые изменения отслеживаемых файлов в рабочем дереве, так как отбрасываются.

1 голос
/ 14 апреля 2016

У меня просто была эта проблема, когда я:

  • добавил поддерево;
  • понял, я добавил его неправильно (в неправильный каталог);
  • удалил его с помощью rm;
  • попытался импортировать его снова (в правильное место).

Хотя puppet diff был - правильно - ничего не отображал, git diff-index HEAD в спискекаждый из файлов, которые я только что удалил, был «удален» - хотя я никогда ничего не фиксировал (а тем более нажимал).

Полагаю, это ошибка в git (здесь используется 2.7.0).) ... Ошибка или нет, обходной путь - переключиться на любую другую ветку (с обычной git checkout ....) и затем вернуться к вашей.Надеюсь, это кому-то поможет - даже если не оригинальная аскер.

0 голосов
/ 22 апреля 2019

Если вы используете Windows, попробуйте использовать Git Bash вместо PowerShell или cmd.exe. Это исправило проблему в моем случае.

0 голосов
/ 11 июня 2012

Попробуйте вытащить без --squash, как описано в этот вопрос о переполнении стека .

...