Git Commit: мастер-класс

Опубликовано: 2023-02-26
Ноутбук на синем фоне с командной строкой Linux.
Фатмавати Ачмад Заэнури/Shutterstock.com
Команда Git commit сохраняет копии изменений из вашего рабочего каталога в вашем репозитории Git. Но его также можно использовать для изменения существующих коммитов и для отмены коммитов.

Основное требование любой системы контроля версий — хранить для вас разные версии файлов. В Git для этого используется команда commit . Вот все, что вам нужно знать.

Оглавление

Что такое коммит в Git?
Настройка команды фиксации
Использование команды фиксации
Основное обязательство
Файлы автопостановки
Постановка и коммит одновременно
Переход в другую ветку
Внесение изменений в коммиты
Удаление изменений из фиксации
Откат всего коммита
Швейцарский армейский нож Git

Что такое коммит в Git?

Коммиты — это серия моментальных снимков, сделанных на протяжении всего жизненного цикла проекта, которые составляют историю его разработки. Коммиты — это то, что позволяет нам извлекать версию проекта, какой она была в разные моменты в прошлом. Почему это важно?

Системы контроля версий (VCS) чаще всего используются с исходным кодом программного обеспечения и проектами разработки. Но их можно успешно использовать с любой коллекцией текстовых файлов, например, с файлами Markdown, содержащими главы книги.

Возможно, вы не хотите, чтобы VCS обрабатывал каждый файл в каталогах вашего проекта, поэтому вам нужно иметь возможность назначать файлы, которые вы хотите контролировать версиями. Это добавит их в представление управления версиями проекта. Они будут отслеживать изменения.

Другой способ добиться этого — использовать список игнорирования. Это сообщает Git, какие файлы, каталоги или типы файлов он всегда должен игнорировать.

Со временем, по мере добавления в проект новых файлов, некоторые из них потребуют добавления в систему контроля версий. В Git для этого используется команда add . На самом деле, как мы увидим, команда add выполняет двойную функцию.

Чтобы сохранить историю изменений, внесенных в проект, вы будете периодически запрашивать у Git сохранение моментального снимка состояния проекта с помощью команды commit . Именно здесь в нашем рабочем процессе снова появляется команда add . Мы используем команду add , чтобы сообщить Git, какие измененные файлы мы хотим включить в снимок. Затем мы используем commit , чтобы сказать Git создать снимок.

Настройка команды фиксации

Вместе с ним хранится информация о фиксации, так что всегда можно узнать, кто сделал фиксацию, когда и что в ней содержится. Некоторые из этих метаданных захватываются во время фиксации, например, сообщение фиксации.

Метаданные, относящиеся к личности членов группы разработчиков, могут быть настроены каждым пользователем, чтобы предотвратить повторное предоставление одной и той же информации.

Чтобы установить свое имя глобально для всех репозиториев на вашем компьютере, используйте эту команду.

 git config --global user.name «Дэйв Маккей» 

Установка глобального имени пользователя Git

Чтобы убедиться, что ваше имя установлено, используйте эту команду.

 git config --global user.name 

Проверка глобального имени пользователя Git

Если вам нужно использовать другое имя для определенного репозитория, перейдите в каталог проекта и используйте ту же команду без параметра --global .

 git config user.name "Маккей, Дэвид"
 git config user.name 

Установка имени пользователя Git для конкретного репозитория

Теперь у нас есть другое имя пользователя по умолчанию для этого репозитория, и наше глобальное имя по-прежнему используется для других репозиториев.

Аналогичным образом мы можем установить адрес электронной почты либо глобально, либо для одного репозитория, включив или опустив параметр --global .

 git config user.email "[email protected]"
 git config --global user.email "[email protected]"
 git config user.email
 git config --global user.email 

Настройка глобальных и специфичных для репозитория адресов электронной почты пользователей Git по умолчанию

Эти настройки хранятся в конфигурационных файлах. Глобальные настройки Git хранятся в «~/.gitconfig», а настройки, специфичные для репозитория, хранятся в файле репозитория «.git/config».

Команда commit ссылается на эти значения и использует их в своей работе.

Использование команды фиксации

Основное использование команды commit состоит в том, чтобы взять файлы, находящиеся в промежуточной области, известной как индекс, и сохранить их как фиксацию в текущей ветке репозитория.

Основное обязательство

У нас есть проект с измененным файлом. Мы будем использовать команду add , чтобы подготовить файл, а затем зафиксировать его. Мы используем параметр -m (сообщение о фиксации), чтобы мы могли дать краткое описание цели изменений. Если мы не используем эту опцию, нам будет предложено ввести сообщение фиксации, когда произойдет фиксация. Удобнее добавить его в командной строке.

 git добавить jibber.c
 git commit -m "Обновленный текст справки" 

Постановка и фиксация одного файла

Если мы используем команду git log , мы можем просмотреть детали коммитов в хронологическом порядке, причем самый последний коммит будет вверху списка.

 журнал git 

Проверка журнала репозитория Git

Коммиты отображаются в less .

Последняя фиксация вверху журнала Git

Коммит был помечен именем и адресом электронной почты, которые мы указали ранее, и наше сообщение фиксации также записано.

Файлы автопостановки

Подготовка большого количества файлов может занять некоторое время. Другой подход заключается в использовании опции -A (все) с add .

Это автоматически помещает все измененные файлы вместе со всеми неотслеживаемыми в настоящее время файлами. Постановка неотслеживаемых файлов соответствует настройкам в вашем файле «.gitignore». Git не будет размещать файлы, которые вы сказали, что не хотите включать. Наконец, файлы в индексе, которые больше не находятся в рабочем каталоге, удаляются из индекса.

Очевидно, что опция -A может привести к тому, что многое произойдет одновременно. Опция --dry-run дает вам предварительный просмотр изменений без фактического их выполнения.

 git добавить -A --сухой запуск 

Использование --dry-run для предварительного просмотра файлов, которые будут подготовлены и не подготовлены.

В нашем примере он создаст два измененных существующих файла и два новых файла. Давайте продолжим и воспользуемся параметром -A , прежде чем использовать команду commit .

 git добавить -A
 git commit -m «Расширенный синтаксический анализ» 

Фиксация измененных и вновь созданных файлов после использования опции add -A

Мы видим, что всего четыре файла изменены. Два из них — это вновь созданные файлы, которые перечислены.

Постановка и коммит одновременно

Команда commit имеет параметр -a (все) в нижнем регистре. Это выполняет подготовку и фиксацию файлов за один шаг.

Опция commit -a устанавливает и фиксирует измененные существующие файлы и удаляет файлы из индекса, если они были удалены из вашего рабочего каталога. Он не создает автоматически неотслеживаемые файлы.

Как и команда add , команда фиксации имеет параметр --dry-run , который позволяет предварительно просмотреть ее действия перед выполнением.

 git commit -a --dry-run 

Использование параметра commit -a для предварительного просмотра изменений без их выполнения

Теперь выполним команду.

 git commit -a --dry-run 

Использование опции commit -a для постановки и фиксации за один шаг

Файлы подготовлены и зафиксированы для нас.

Переход в другую ветку

Если вы внесли некоторые изменения в файлы в своем рабочем каталоге, а затем поняли, что не извлекли нужную ветку, вам нужно зафиксировать свои изменения в правильной ветке, не затрагивая текущую ветку.

В Git нет команды для фиксации в другой ветке. Но вы можете исправить эту ситуацию, немного поработав с Git.

Мы будем использовать команду Git stash , чтобы сделать копию изменений. Затем мы проверим правильную ветку и применим изменения из тайника. Чтобы применить спрятанные изменения, мы используем команду pop , а не команду apply . Команда pop применяет изменения, а также удаляет их из тайника.

Мы внесли некоторые изменения в ветку new-parser нашего репозитория. Они должны были быть сделаны в ветке classic-parser .

 git тайник
 git checkout классический парсер
 git тайник поп 

Сохранение изменений, проверка ветки и применение изменений из тайника

Теперь мы можем выполнить commit и обновить эту ветку.

 git commit -a -m "Добавлены функции предварительного парсера" 

Фиксация изменений, извлеченных из тайника

Если мы вернемся к ветке new-parser мы увидим, что она обновлена, то есть изменения были удалены из вашего рабочего каталога, а ваш репозиторий и файлы синхронизированы.

 git checkout новый парсер
 статус git 

Проверка состояния ветки, чтобы убедиться, что она актуальна

СВЯЗАННЫЕ С: Как обновлять и поддерживать отдельные ветки Git

Внесение изменений в коммиты

Если вам нужно улучшить сообщение о фиксации — возможно, вы заметили в нем опечатку — или вы забыли подготовить файл, который должен был быть включен в фиксацию, вы можете использовать параметр --amend , чтобы все исправить. Предупреждение: это не следует использовать для коммитов, которые были отправлены в удаленный репозиторий.

В нашем последнем сообщении фиксации «fraze» должно было быть «phrase». Если мы используем git log мы можем это увидеть.

Журнал Git с выделенным типом

Чтобы исправить это, мы будем использовать параметр --amend , подобный этому.

 git commit --amend -m "Оптимизированная идентификация фраз" 

Использование параметра commit --amend для исправления сообщения фиксации

Если мы воспользуемся git log еще раз, мы увидим, что старый коммит был заменен новым с исправленным сообщением коммита.

Журнал Git с исправленным сообщением фиксации

Если мы хотим добавить файл, который мы забыли подготовить, мы можем зафиксировать этот файл, чтобы он отображался как часть предыдущей фиксации.

Мы будем использовать add для создания файла, а затем сделаем коммит с параметром --amend . Параметр --no-edit означает, что нам не нужно предоставлять новое сообщение фиксации. Предыдущее сообщение фиксации сохраняется.

 git добавить jibber.c
 git совершить --изменить --no-edit 

Коммит файла в предыдущий коммит

Удаление изменений из фиксации

Если вы непреднамеренно создали и зафиксировали файл, который вы не собирались делать, вы можете удалить этот файл из фиксации с помощью команды reset . Мы сбросим фиксацию обратно в промежуточную область или index. Затем мы удалим файл и повторно зафиксируем остальные файлы.

Чтобы сбросить последний коммит в промежуточную область, мы используем команду reset --soft . HEAD~ — это сокращение от «фиксация после HEAD временной шкалы фиксации проекта», или, по-английски, «последняя фиксация».

 git reset --soft HEAD~ 

Отправка последнего коммита обратно в промежуточную область

Чтобы удалить файл, который не должен был быть включен, мы используем команду reset --mixed . Это сбрасывает эти изменения обратно в рабочий каталог, воссоздавая измененный файл как незафиксированный, незафиксированный файл.

 git reset --mixed jibber.c 

Удаление файла из промежуточной области Git

Нам нужно зафиксировать другие файлы, оставшиеся в индексе.

 git commit -m «Экспериментальные настройки» 

Фиксация файлов, оставшихся в промежуточной области

Два других файла, которые были в исходном коммите, повторно коммитятся для нас.

СВЯЗАННЫЕ С: Как исправить, отредактировать или отменить коммиты Git (изменение истории Git)

Откат всего коммита

Иногда проще всего отменить всю фиксацию. Он возвращает ваш рабочий каталог и репозиторий в то состояние, в котором они были до того, как вы совершили коммит.

Нам нужно использовать хешированный идентификатор ссылки коммита. Мы можем найти это с помощью git log :

Журнал Git с выделенным идентификатором фиксации

Скопируйте эту ссылку и используйте ее в команде revert :

 git вернуть e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

Возврат фиксации, идентифицированной ее идентификатором фиксации

Откроется ваш редактор по умолчанию, чтобы вы могли отредактировать сообщение об отмене. Для вас введено сообщение по умолчанию. Вы можете либо использовать это, либо отредактировать его по своему вкусу.

Редактирование сообщения об отмене с выделенным сообщением по умолчанию

Когда вы довольны своим сообщением об отмене, сохраните файл и выйдите из редактора. В nano вы делаете это с помощью «Ctrl+O» и «Ctrl+X».

Завершенное действие возврата, отменяющее всю фиксацию

Используя git log еще раз, мы видим, что был добавлен новый коммит, который отменяет изменения отмененного коммита.

Швейцарский армейский нож Git

Очевидно, commit — одна из самых важных команд Git. Он может многое, так что есть чему поучиться. Чтобы разобраться с его менее используемыми функциями, нужно потратить время с пользой. Когда вам нужно исправить ошибку — прямо сейчас — вы будете рады, что подготовились заранее.

СВЯЗАННЫЕ С: Как использовать слияние Git