Git diff cached ничего не делает
Вот где я нахожусь:
- создал новое РЕПО на GitHub
- инициализировано (git add .) мой рабочий каталог локально на моем ПК
- committed (git commit-m) все изменения в stage
- внес еще одно изменение, добавив новое .png файл
- сделал еще один git commit-m
- Теперь я хочу увидеть список всех промежуточных файлов, которые будут отправлены, прежде чем я действительно отправлю их в первый раз (или действительно в любое время) в удаленное хранилище (https//.../../). Так я и предполагал там было бы 2 фиксации, полные изменений, чтобы показать для
Если я попробовал commit again (#3), он показывает nothing to commit, working directory clean. Так что я, должно быть, совершил успешно в прошлый раз, я предполагаю, почему он говорит это.
Когда я делаю git status, я получаю nothing to commit, working directory clean
Но когда я пытаюсь набрать
git diff --cached --name-only или git diff --staged в терминале в OS X, это ничего не дает. Я просто получаю командную строку после выполнения этой команды снова. Я что-то упустил? Я искал материал на git diff, но я, должно быть, слеп.
2 ответов:
Запуск
git diff --cachedпокажет вам разницу между репозиторием и индексом (местом, где файлы размещаютсяgit addперед их фиксацией в репозитории). Он не просматривает файлы в вашем рабочем каталоге и не сравнивает различия между ревизиями в репозитории.Если вы хотите увидеть, чем ваш локальный репозиторий отличается от вышестоящего репозитория, сначала убедитесь, что ваш локальный кэш удаленного репозитория обновлен:
git remote updateА затем сравните вашу локальную ветвь с соответствующей ветвью в удаленном репозитории:
git diff --name-only mybranch origin/mybranch..предположим, что ваш пульт дистанционного управления называется
origin, что, вероятно, так и есть.Обновить
Если вы нажимаете на пустой удаленный репозиторий, то ответ на вопрос "какие файлы будут нажиматься?"есть" все они", и бежать не от чего.
Вы можете запустить
git ls-files, чтобы просмотреть список всех файлов в репозитории.В моем предыдущем примере
mybranchбудет имя ветви, напримерmasterилиbug/1234илиthis-is-a-nifty-feature, и пример предполагает, что вы перемещаете локальную ветвь в ветвь с тем же именем в удаленном репозитории.Обновление 2
Вы спросили:
Моя удаленная ветвь-это url, так что же такое origin...uri/[имя РЕПО]? так происхождение-это uri? И что я буду называть именем моего местного жителя филиал?
Репозиторий git может быть связан с одним или несколькими удаленными репозиториями, называется"пульты". Если вы клонируете удаленный репозиторий:
$ git clone [email protected]:larsks/sandbox.gitВы получите удаленный вызов
origin, ссылающийся на этот репозиторий:$ cd sandbox $ git remote -v origin [email protected]:larsks/sandbox.git (fetch) origin [email protected]:larsks/sandbox.git (push)Ваша локальная ветвь изначально называется
master, поэтому ваш первоначальный толчок будет выглядеть следующим образом:$ git push origin masterПри этом git попросит переместить вашу локальную ветвь
Но вы можете создавать новые ветви, используя команды "git checkout-b" или "git branch". Есть там много документации, которая, вероятно, обеспечит лучший обзор, чем я могу в этом ответе. Я бы начал с книги Git.masterв ветвьmasterудаленного репозитория, называемогоorigin.
Поскольку изображение стоит 1000 слов, и я не хочу заново изобретать колесо, позвольте мне связать одну из иллюстраций https://git-scm.com книга, показывающая жизненный цикл файла в git и показывающая роль кэша. Я признаю, что есть пара вещей, которые мне не нравятся в этой картине, но она хорошо послужит этой цели.
Если вы сделали некоторые изменения и находитесь в середине этапа ("сленг" для выражения "добавление в кэш") некоторые из них они с
git addи более детализированнымиgit add -p, то командыgit diffиgit diff --cachedявляются способами увидеть, что уже было добавлено в кэш и что еще можно добавить. Под добавлением здесь я подразумеваюgit add- мудрый, поэтому добавление неотслеживаемого файла или добавление модификации.
git diff: показывает модификации, которые вы можете выполнить сgit add. Обратите внимание, что это относится только к стрелке "stage the file", она не содержит список неотслеживаемых файлов.git diff --cached: показывает только разницу между вещи уже инсценированы и предыдущий коммит.В вашем случае,
git diff --cachedничего не показывает, потому что вы уже совершили все, что было в вашей промежуточной зоне, и ничего не добавили с тех пор.Причина, по которой опция называется
--cached, заключается в том, что промежуточная область git изначально называласьcache. Вы также столкнетесь с терминомindex.Ответ @ larsks правильный, я просто хотел дать эту альтернативную картину в ответ на комментарии, которые последовал его ответ.

Comments