Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Анализ сделанных изменений

Во время разработки программистам часто приходится останавливаться и анализировать изменения, которые они сделали с последнего коммита. Потребность смотреть изменения становится очевидной, если представить себе, что такое работа над реальным проектом. Как правило, это тысячи (десятки и сотни тысяч) строк кода, сотни и тысячи файлов и иногда несколько дней работы. Потратив даже несколько часов над работой в таком проекте, очень сложно вспомнить что и где менялось, а что ещё осталось поменять.

Анализировать изменения важно даже в небольших проектах. Прямо сейчас во время разработки этого курса изменилось несколько файлов и git status выглядит так:

git_course$ git status

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   300-working-directory/README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   100-intro/README.md
    modified:   250-github/README.md
    modified:   300-working-directory/README.md
    modified:   300-working-directory/spec.yml
    modified:   350-changes/README.md

Попробуем воспроизвести подобную ситуацию в нашем проекте. Выполним следующий код в репозитории hexlet-git:

hexlet-git$ echo 'new line' >> INFO.md 
hexlet-git$ echo 'Hello, Hexlet! How are you?' > README.md 

hexlet-git$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   INFO.md
    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

Изменились оба файла. В один мы добавили строчку, в другом заменили. Как теперь посмотреть эти изменения? Для этого в git есть команда git diff, которая показывает разницу между тем, что было и что стало:

hexlet-git$ git diff

diff --git a/INFO.md b/INFO.md
index d5225f8..40f51f1 100644
--- a/INFO.md
+++ b/INFO.md
@@ -1 +1,2 @@

 git is awesome!
+new line

diff --git a/README.md b/README.md
index ffe7ece..00fd294 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@

-Hello, Hexlet!
+Hello, Hexlet! How are you?

Вывод команды поначалу может смутить. Здесь довольно много служебных данных, за которыми уже идут изменения. git diff выводит именно те строки, которые изменились (и иногда строки вокруг измененных для удобства анализа), а не файлы целиком. Слева от них ставится знак "-", если строка была удалена, и "+" для добавленных строк.

Сама команда не просто выводит на экран разницу между файлами, но и запускает пейджер — специальную программу, которая позволяет перемещаться по выводу и искать внутри него нужные данные. Для перемещения вниз по дифу нужно нажать f, для перемещения наверх — u Для выхода из режима просмотра нажмите q.

По умолчанию git diff показывает изменения только для тех модифицированных файлов, которые ещё не были добавлены в индекс. Подразумевается, что добавленные в индекс файлы смотреть не нужно, ведь мы их уже подготовили к коммиту. В реальности же часто хочется и нужно смотреть все изменения, которые находятся в рабочей копии. Для этого нужно запустить команду вывода дифа с флагом --staged:

# Выведет все изменения сделанные в рабочей директории
# и находящиеся в индексе
hexlet-git$ git diff --staged

git diff — команда, которую нужно обязательно запускать перед каждым коммитом. Она позволяет проанализировать добавляемые изменения и исправить возможные ошибки. Иногда программисты по ошибке добавляют в коммит то, что туда не должно попасть.

Самостоятельная работа

  1. Выполните все шаги из урока
  2. Зафиксируйте все изменения в репозитории. Сделайте коммит с сообщением add new content
  3. Залейте изменения на Github

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».