Git Commit: мастер-класс
Опубликовано: 2023-02-26 Основное требование любой системы контроля версий — хранить для вас разные версии файлов. В 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 config --global user.name
Если вам нужно использовать другое имя для определенного репозитория, перейдите в каталог проекта и используйте ту же команду без параметра --global
.
git config user.name "Маккей, Дэвид"
git config user.name
Теперь у нас есть другое имя пользователя по умолчанию для этого репозитория, и наше глобальное имя по-прежнему используется для других репозиториев.
Аналогичным образом мы можем установить адрес электронной почты либо глобально, либо для одного репозитория, включив или опустив параметр --global
.
git config user.email "[email protected]"
git config --global user.email "[email protected]"
git config user.email
git config --global user.email
Эти настройки хранятся в конфигурационных файлах. Глобальные настройки Git хранятся в «~/.gitconfig», а настройки, специфичные для репозитория, хранятся в файле репозитория «.git/config».
Команда commit
ссылается на эти значения и использует их в своей работе.
Использование команды фиксации
Основное использование команды commit
состоит в том, чтобы взять файлы, находящиеся в промежуточной области, известной как индекс, и сохранить их как фиксацию в текущей ветке репозитория.
Основное обязательство
У нас есть проект с измененным файлом. Мы будем использовать команду add
, чтобы подготовить файл, а затем зафиксировать его. Мы используем параметр -m
(сообщение о фиксации), чтобы мы могли дать краткое описание цели изменений. Если мы не используем эту опцию, нам будет предложено ввести сообщение фиксации, когда произойдет фиксация. Удобнее добавить его в командной строке.
git добавить jibber.c
git commit -m "Обновленный текст справки"
Если мы используем команду git log
, мы можем просмотреть детали коммитов в хронологическом порядке, причем самый последний коммит будет вверху списка.
журнал git
Коммиты отображаются в less
.
Коммит был помечен именем и адресом электронной почты, которые мы указали ранее, и наше сообщение фиксации также записано.
Файлы автопостановки
Подготовка большого количества файлов может занять некоторое время. Другой подход заключается в использовании опции -A
(все) с add
.
Это автоматически помещает все измененные файлы вместе со всеми неотслеживаемыми в настоящее время файлами. Постановка неотслеживаемых файлов соответствует настройкам в вашем файле «.gitignore». Git не будет размещать файлы, которые вы сказали, что не хотите включать. Наконец, файлы в индексе, которые больше не находятся в рабочем каталоге, удаляются из индекса.
Очевидно, что опция -A
может привести к тому, что многое произойдет одновременно. Опция --dry-run
дает вам предварительный просмотр изменений без фактического их выполнения.
git добавить -A --сухой запуск
В нашем примере он создаст два измененных существующих файла и два новых файла. Давайте продолжим и воспользуемся параметром -A
, прежде чем использовать команду commit
.
git добавить -A
git commit -m «Расширенный синтаксический анализ»
Мы видим, что всего четыре файла изменены. Два из них — это вновь созданные файлы, которые перечислены.
Постановка и коммит одновременно
Команда commit
имеет параметр -a
(все) в нижнем регистре. Это выполняет подготовку и фиксацию файлов за один шаг.
Опция commit -a
устанавливает и фиксирует измененные существующие файлы и удаляет файлы из индекса, если они были удалены из вашего рабочего каталога. Он не создает автоматически неотслеживаемые файлы.
Как и команда add
, команда фиксации имеет параметр --dry-run
, который позволяет предварительно просмотреть ее действия перед выполнением.
git commit -a --dry-run
Теперь выполним команду.
git commit -a --dry-run
Файлы подготовлены и зафиксированы для нас.
Переход в другую ветку
Если вы внесли некоторые изменения в файлы в своем рабочем каталоге, а затем поняли, что не извлекли нужную ветку, вам нужно зафиксировать свои изменения в правильной ветке, не затрагивая текущую ветку.
В 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
мы можем это увидеть.
Чтобы исправить это, мы будем использовать параметр --amend
, подобный этому.
git commit --amend -m "Оптимизированная идентификация фраз"
Если мы воспользуемся git log
еще раз, мы увидим, что старый коммит был заменен новым с исправленным сообщением коммита.
Если мы хотим добавить файл, который мы забыли подготовить, мы можем зафиксировать этот файл, чтобы он отображался как часть предыдущей фиксации.
Мы будем использовать 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 commit -m «Экспериментальные настройки»
Два других файла, которые были в исходном коммите, повторно коммитятся для нас.
СВЯЗАННЫЕ С: Как исправить, отредактировать или отменить коммиты Git (изменение истории Git)
Откат всего коммита
Иногда проще всего отменить всю фиксацию. Он возвращает ваш рабочий каталог и репозиторий в то состояние, в котором они были до того, как вы совершили коммит.
Нам нужно использовать хешированный идентификатор ссылки коммита. Мы можем найти это с помощью git log
:
Скопируйте эту ссылку и используйте ее в команде revert
:
git вернуть e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8
Откроется ваш редактор по умолчанию, чтобы вы могли отредактировать сообщение об отмене. Для вас введено сообщение по умолчанию. Вы можете либо использовать это, либо отредактировать его по своему вкусу.
Когда вы довольны своим сообщением об отмене, сохраните файл и выйдите из редактора. В nano вы делаете это с помощью «Ctrl+O» и «Ctrl+X».
Используя git log
еще раз, мы видим, что был добавлен новый коммит, который отменяет изменения отмененного коммита.
Швейцарский армейский нож Git
Очевидно, commit
— одна из самых важных команд Git. Он может многое, так что есть чему поучиться. Чтобы разобраться с его менее используемыми функциями, нужно потратить время с пользой. Когда вам нужно исправить ошибку — прямо сейчас — вы будете рады, что подготовились заранее.
СВЯЗАННЫЕ С: Как использовать слияние Git