Введение
DAYLIGHT CAFE исправляет цену на флэт уайт. Изменение цены и соответствующее меню навынос для скачивания уже подготовлены. В том же файле меню есть незавершённый анонс сезонных напитков, а личные заметки о дегустации не должны попасть в публичный коммит.
Вы выберете, что именно войдёт в один коммит Git, сохранив остальную работу. Вам понадобятся базовые навыки навигации в терминале и работы с простыми текстовыми файлами. Рабочее дерево Git, область подготовки и снимки коммитов объясняются в этой работе; программировать сайт или иметь учётную запись GitHub не требуется.
Используйте Workspace для команд, Working Copy для просмотра редактируемых файлов и Committed Menu для просмотра точных файлов, сохранённых в текущем коммите. Обе страницы читают настоящее содержимое и никогда не подставляют отсутствующие файлы. Кафе, иллюстрация и меню — оригинальные учебные материалы. Названия элементов интерфейса и вывод программ остаются на английском языке.
Изучите две версии меню
На этом шаге вы сравните публичное меню с подготовленными рабочими файлами, а затем зададите данные автора только для этого репозитория.
Откройте Committed Menu. Флэт уайт стоит EUR 3.80, а на сезонной доске написано, что напитки находятся в разработке. Нажмите Download takeaway menu, чтобы открыть настоящий текстовый файл для скачивания. В нём также указана цена EUR 3.80.
Переключитесь на Working Copy. Теперь флэт уайт стоит EUR 4.20, но сезонная доска также содержит анонс закрытой дегустации. Одобрено только исправление цены. В обоих публичных файлах меню должна быть одинаковая цена EUR 4.20; сезонный черновик и tasting-notes.txt должны остаться на вашей машине, вне коммита.
В Working Copy незавершённый сезонный анонс остаётся видимым:

Переключитесь на Workspace. Он открывается в /home/labex/project/daylight-menu — подготовленном репозитории Git. Команда pwd выводит текущий каталог:
pwd
Если вы перешли в другой каталог, вернитесь по полному пути:
cd /home/labex/project/daylight-menu
Репозиторий хранит снимки проекта и его историю. Рабочее дерево — это набор файлов, которые вы можете редактировать. Команда git status --short кратко показывает, чем эти файлы отличаются от последнего коммита и от области подготовки. Параметр --short задаёт компактный формат:
git status --short
Вы должны увидеть изменённые menu.txt и menu-download.txt, а также ?? tasting-notes.txt. ?? означает, что заметки не отслеживаются: Git ещё не добавил их в снимок. Изменённый файл не включается в коммит автоматически.
Git записывает имя и адрес электронной почты автора в каждый коммит. Команда git config --local сохраняет настройку только в этом репозитории. Кавычки объединяют два слова имени в одно значение. Используйте эти вымышленные учебные данные:
git config --local user.name "Alex Morgan"
git config --local user.email "alex@example.test"
Прочитайте сохранённые значения:
git config --local user.name
git config --local user.email
Ожидаются Alex Morgan и alex@example.test. Глобальные данные автора Git и внешняя учётная запись не меняются. Все дальнейшие команды этой работы выполняются в том же репозитории.
Подготовьте только одобренный фрагмент с ценой
На этом шаге вы поместите одобренное исправление цены в область подготовки, не включая сезонный черновик.
Оставайтесь в Workspace. Коммит — это сохранённый снимок. HEAD обозначает текущий коммит. Область подготовки, также называемая индексом, содержит точный снимок, который будет записан следующим коммитом. Подготовка копирует выбранное содержимое в индекс; остальные рабочие изменения при этом не удаляются.
--no-pager — параметр Git, который выводит результат напрямую, не открывая интерактивный просмотрщик. Используйте его в сравнениях ниже. Если предыдущая команда Git уже открыла просмотрщик с надписью (END), нажмите q, чтобы вернуться в оболочку; не вводите следующую команду в просмотрщик.
Команда git --no-pager diff сравнивает рабочее дерево с индексом. Разделитель -- указывает, что следующий аргумент — имя файла, а не параметр Git:
git --no-pager diff -- menu.txt
Найдите две группы изменений — фрагменты, или hunks. Строка, начинающаяся с -, показывает прежнее содержимое; строка с + — предлагаемое. Первый фрагмент меняет цену флэт уайта с 3.80 на 4.20. Второй меняет сезонный анонс. Строка @@ указывает положение каждого фрагмента и не является содержимым меню.
Команда git add --patch спрашивает, какие фрагменты скопировать в индекс. Она меняет подготовленный снимок, оставляя полный рабочий файл нетронутым:
git add --patch menu.txt
На фрагменте с ценой флэт уайта введите y и нажмите Enter, чтобы подготовить его. На фрагменте с сезонной доской введите n и нажмите Enter, чтобы оставить его неподготовленным. Перед каждым ответом читайте показанный текст; y означает «да», а n — «нет».
Теперь изучите фактическую подготовленную разницу. Параметр --cached выбирает сравнение между HEAD и индексом:
git --no-pager diff --cached -- menu.txt
Должно отображаться только исправление цены. Сравните его с тем, что ещё не подготовлено:
git --no-pager diff -- menu.txt
Здесь должен отображаться только сезонный анонс. Коммит ещё не создан.
Если вы выбрали неправильный фрагмент, используйте git restore --staged, чтобы восстановить запись этого файла в индексе из HEAD. Параметр --staged действует только на индекс, поэтому исправление цены и черновик останутся в рабочем файле:
git restore --staged menu.txt
Затем повторите git add --patch menu.txt, выберите фрагмент с ценой и снова изучите обе разницы. Такой способ исправления безопасен до создания коммита, поскольку не удаляет ваши рабочие файлы.
Добавьте соответствующее меню навынос для скачивания
На этом шаге вы сделаете следующий коммит самодостаточным: добавите соответствующий файл для скачивания и проверите каждый подготовленный файл.
Оставайтесь в Workspace. Кафе предлагает и страницу, и меню навынос. Исправление только одной версии оставило бы две разные цены. Команда cat выводит содержимое небольшого текстового файла:
cat menu-download.txt
В нём уже есть Flat white: EUR 4.20. Этот файл содержит только одобренное исправление, поэтому подготовьте его целиком:
git add menu-download.txt
Обычная команда git add подготавливает указанный файл. Не подготавливайте весь каталог: в нём также находятся личные заметки и незавершённый анонс.
Параметр --name-only выводит пути из сравнения без содержимого. Проверьте подготовленные пути:
git --no-pager diff --cached --name-only
Список должен содержать только menu-download.txt и menu.txt. Затем изучите полную подготовленную разницу этих файлов:
git --no-pager diff --cached
Обе публичные версии должны содержать одинаковую цену 4.20. Сезонный анонс и заметки о дегустации не должны появляться в этой разнице.
Чтобы прочитать полный подготовленный файл, а не разницу, используйте git --no-pager show с :menu.txt. Двоеточие в начале выбирает запись индекса:
git --no-pager show :menu.txt
Подготовленное меню сочетает EUR 4.20 с исходным сезонным текстом Seasonal drinks are being planned. Это сочетание показывает, что индекс может отличаться от рабочего дерева.
Если вы случайно подготовили личные заметки, уберите их из области подготовки, не удаляя файл:
git restore --staged tasting-notes.txt
Выполняйте эту команду исправления только тогда, когда заметки были подготовлены; в противном случае Git может обоснованно сообщить, что неотслеживаемый путь неизвестен. Перед продолжением снова изучите git --no-pager diff --cached. Опечатка в имени файла ничего не меняет: найдите настоящее имя с помощью git status --short и повторите нужную команду.
Создайте коммит и проверьте фактический публичный результат
На этом шаге вы запишете один целевой коммит и убедитесь, что незавершённая работа по-прежнему доступна.
Оставайтесь в Workspace. Команда git commit записывает весь индекс как новый снимок. Параметр -m задаёт короткое поясняющее сообщение; кавычки объединяют его в одно значение:
git commit -m "Correct the flat white price"
Git сообщает о новом коммите и двух изменённых файлах. Его хеш будет отличаться. Сообщение описывает работу, но значение имеет фактическое содержимое снимка.
Команда git --no-pager show позволяет прочитать файл непосредственно из коммита. HEAD:menu.txt означает файл с именем menu.txt, сохранённый в текущем коммите:
git --no-pager show HEAD:menu.txt
git --no-pager show HEAD:menu-download.txt
Обе команды показывают одобренную цену 4.20. В сезонном анонсе из коммита по-прежнему говорится, что напитки находятся в разработке.
Проверьте оставшуюся работу:
git status --short
Ожидаются M menu.txt и ?? tasting-notes.txt. Два столбца состояния различают подготовленные изменения слева и неподготовленные рабочие изменения справа. M во втором столбце означает, что сезонный черновик остаётся неподготовленным. Заметки по-прежнему не отслеживаются. Пустой вывод состояния был бы неправильным результатом для этой задачи: он означал бы, что требуемая незавершённая работа исчезла или вошла в коммит.
Прочитайте оставшуюся разницу и заметки:
git --no-pager diff -- menu.txt
cat tasting-notes.txt
Переключитесь на Committed Menu и обновите страницу. Убедитесь, что флэт уайт стоит EUR 4.20, а сезонная доска сохраняет исходный публичный текст. Снова скачайте меню навынос и проверьте ту же цену в настоящем файле. Переключитесь на Working Copy: черновик анонса закрытой дегустации по-прежнему виден там.
Меню из коммита показывает одобренную цену и исходный публичный сезонный анонс:

Теперь у вас есть одно полное публичное исправление, а остальная работа сохранена. Отправлять изменения командой push не требуется; этот проект учит определять границы локального коммита. Совместная работа с удалённым репозиторием рассматривается в отдельном проекте.
Резюме
Вы разграничили рабочие файлы, индекс и коммит, выбрали один фрагмент изменений, добавили соответствующий файл для скачивания и проверили настоящее меню из коммита. Сезонный черновик и личные заметки остались вне коммита. Полезный коммит содержит всё запланированное изменение целиком, а не все файлы, которые оказались изменены.



