#git
#git
Вопрос:
Я довольно новичок в Git, поэтому, возможно, я чего-то здесь не понимаю.
dan@one:/var/www/$ git status -s
M GoogleChromeExtension.js
M ApiClient.js
Итак, очевидно, что были изменены 2 файла.
Но когда я запускаю:
git diff
выходные данные не отображаются. Я ожидал получить изменения между моей рабочей копией и последним коммитом.
Я уверен, что вчера все работало так, как ожидалось…
Может быть, это потому, что я не отправлял изменения на удаленный сервер?
PS: Я использую GitHub
Спасибо,
Дэн
Комментарии:
1. Пожалуйста, добавьте вывод «git status» без «-s»
2. У меня прямо противоположная проблема — несмотря на то, что была изменена всего пара строк, весь файл отображается в git diff. Похоже, это проблема IDE (с использованием Intelli J). Какие-нибудь указания?
Ответ №1:
Сделайте git diff --cached
— он сравнивает заголовок и индекс, т. Е. Материал, добавленный для фиксации.
Между индексом и рабочим каталогом находится только a git diff
, поэтому, если все изменения были подготовлены для фиксации, вы ничего не увидите в git diff
Третья форма — это git diff <commit>
которая сравнивает рабочий каталог и фиксацию. Выполнение этого git diff HEAD
также даст вам разницу, которую вы хотите.
Комментарии:
1. Также обратите внимание, что из выходных данных git-status можно определить, что изменения файла внесены в индекс, потому что ‘M’ появляется в первом столбце. Если бы изменения не были поэтапными, ‘M’ была бы во втором столбце.
2. @William Pursell — хорошее замечание. Кроме того, если включен цветной вывод, первый имеет зеленый цвет M, а второй — красный. По крайней мере, для меня это имеет место в git bash на Windows. Таким образом, не обязательно просто иметь,
git status
ноgit status -s
также может быть довольно информативным, если вы знаете, где искать.3.
git status -s
в основном предназначен для машинного использования; компьютеры обычно лучше нас замечают, в каком столбце находится M. (И мы лучше читаем цвета.)4. @Jefromi — Я вас понимаю, но для кого-то, кто имеет опыт работы с git,
git status -s
это может быть очень полезно.5. Верно — это определенно вполне удобно, особенно с цветами, но я бы сказал, что большинство людей, задающих и читающих вопросы, подобные этому, вероятно, находятся на том этапе, когда им лучше использовать немного больше контекста.
Ответ №2:
В зависимости от того, что именно происходит, для этого может быть два решения. Было бы лучше, если бы вы не использовали короткий режим, поскольку он скрывает информацию, важную для отладки этого.
Если вы ожидаете изменений, попробуйте запустить git diff HEAD
, чтобы сравнить рабочий каталог с последним коммитом. Если вы уже git add
отредактировали изменения, действие git diff по умолчанию будет заключаться в том, чтобы не показывать эти различия. Смотрите http://git-scm.com/docs/git-diff описание справочной страницы, в котором говорится об этом. git status
Вывод (без -s) помог бы всем увидеть, так ли это.
С другой стороны, если вы не ожидали изменений, это может быть проблема операционной системы / файловой системы. Пожалуйста, сообщите информацию о вашей операционной системе и файловой системе.
Ответ №3:
используйте флаг —no-pager с diff
git --no-pager diff filepath/filename.extn
Ответ №4:
Убедитесь, что вы на самом деле не находитесь в другом репозитории git. И если по какой-либо причине вышеуказанные команды не выполняются, попробуйте запустить:
git show HEAD
Ответ №5:
У меня совсем недавно была эта проблема, и я обнаружил, что это произошло из-за того, что я изменил свой файл .gitattributes для репозитория. Вы недавно меняли какие-либо из своих файлов .gitattributes? Все ли измененные файлы одного типа? Например, мои недавние проблемы затронули файлы *.sql. Когда я отменил изменение в .gitattributes, исходные файлы снова стали неизменными.
Ответ №6:
git diff не показывает разницу между двумя последними фиксациями. git diff показывает разницу между последней фиксацией и изменениями, которые вы внесли в свой код.