Git subtree pull говорит, что рабочее дерево имеет модификации, но статус git говорит, что это не так. Что дает?
Если я сделаю это в одном из своих репозиториев:
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 подразумевает, что у меня нет изменений, поэтому я предполагаю, что трюк git имеет отношение к изменениям в другой ветке, связанной с поддеревом, но это не совсем понятно.
Может ли кто-нибудь дать просветление?
Ответы
Ответ 1
У меня была такая же проблема.
Из источника GIT возникает ошибка, когда команда git diff-index HEAD
возвращает результат, даже если git status
говорит, что рабочее дерево чиста.
Чтобы избежать этой ошибки, в моем случае я повторно проведу текущую ветку рабочего дерева, и все кажется ОК: git checkout <branch>
Это немного смущает, но если кто-то может объяснить, почему...
Ответ 2
Я обошел это сейчас. Мне показалось, что репозиторий был совершенно новым: я никогда ничего не совершал. Как только я передал файл репо, я смог пройти мимо этой ошибки.
Однако, используя команду 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
git reset --hard
исправил его мне
От git reset --help
- hard Сбрасывает индекс и рабочее дерево. Любые изменения в отслеживаемых файлах в рабочем дереве с тех пор отбрасываются.
Ответ 4
У меня была эта проблема, когда я:
- добавлено поддерево;
- реализовано, я добавил его неправильно (в неправильный каталог);
- удалил его с помощью rm;
- попытался снова импортировать его (в нужное место).
Хотя puppet diff
был - правильно - ничего не показывал, git diff-index HEAD
перечислял каждый из файлов, которые я только что удалял, как "удаленные" - хотя я никогда не делал ничего (что гораздо меньше).
Я считаю, что это ошибка в git (с использованием 2.7.0 здесь)... Ошибка или нет, обход - это переход на любую другую ветвь (с обычным git checkout ....
), а затем обратно к твоему. Надеюсь, это помогает кому-то - даже если не оригинальному ассерту.
Ответ 5
Попытайтесь вытащить без --squash
, как описано в fooobar.com/info/255441/....