Процесс работы с коммитами в Git включает создание коммитов, добавление сообщений к ним, просмотр истории коммитов, поиск нужных коммитов, откат изменений с помощью операций типа revert и reset, а также дополнение уже существующих коммитов.
Создание коммита:
Чтобы создать коммит, вы должны сначала добавить изменения в индекс (staging area) с помощью команды git add
.
Затем используйте команду git commit
, чтобы зафиксировать добавленные изменения в локальном репозитории.
Флаг -m
с командой git commit
используется для добавления сообщения к коммиту в терминале. Само сообщение пишется в кавычках после флага -m
.
Если не указывать данный флаг, во время коммита будет открыт текстовый редактор, где нужно будет ввести сообщение для коммита. Сообщение является обязательной частью коммита.
Флаг -a
автоматически добавляет все измененные файлы в индекс (staging area), игнорируя файлы, которые еще не были отслежены (то есть не были добавлены с помощью git add
).
Пример:
git add .
git commit -m "Сообщение коммита"
Дополнение коммита:
Если вы хотите добавить изменения к последнему коммиту, который еще не был отправлен на удаленный репозиторий, используйте команду git commit --amend
. Это откроет текстовый редактор, где вы сможете отредактировать сообщение коммита и/или добавить новые файлы в индекс.
Используя флаг --no-edit
можно только добавить забытые файлы, при этом не изменяя сообщение для коммита.
Пример:
git add forgotten_file.txt
git commit --amend --no-edit
Откат изменений:
Команды git revert
и git reset
предоставляют различные способы отката изменений в Git.
git revert:
git revert <commit_hash>
создает новый коммит, который отменяет изменения, внесенные в указанный коммит. Это делает откат изменений без изменения истории коммитов.git revert
создает новый коммит для отмены изменений, она является безопасным способом отката изменений, так как она не изменяет историю коммитов.git reset:
git reset
используется для изменения указателя текущей ветки (HEAD) на определенный коммит (<commit_hash>) или коммит относительно HEAD (HEAD~<количество_коммитов>).git revert
, git reset
фактически изменяет историю коммитов, поскольку удаляет коммиты из истории. Это делает ее более опасной, особенно если вы работаете с общедоступными ветками, так как это может привести к потере данных и созданию конфликтов с другими разработчиками.git reset
имеет несколько режимов:
--soft
: Откатывает HEAD к указанному коммиту, оставляя изменения в рабочей директории и индексе.--mixed
(по умолчанию): Откатывает HEAD к указанному коммиту, сохраняя изменения в рабочей директории, но удаляя их из индекса (staging area).--hard
: Откатывает HEAD к указанному коммиту, полностью удаляя изменения из рабочей директории и индекса (staging area). Этот режим используется, когда вы хотите полностью удалить изменения.В целом, git revert
предпочтителен, когда откат изменений удалённом на репозитории (без изменения истории коммитов), в то время как git reset
используется, когда необходимо изменить историю коммитов и/или отменить изменения в индексе и рабочей директории в локальном репозитории.
Просмотр логов и поиск нужного коммита:
Команда git log
позволяет просмотреть историю коммитов в репозитории. Она выводит список всех коммитов, начиная с последнего.
Для поиска нужного коммита вы можете использовать фильтры, например, по автору, дате и т.д.
Флаг -p
, также известный как --patch
, используется для вывода изменений (патчей), внесенных в каждый коммит. Этот флаг показывает разницу между содержимым файла на текущем коммите и его предшественнике.
Флаг --oneline
выводит каждый коммит в одной строке, предоставляя краткую сводку о коммите.
Пример:
git log --author="Имя автора"
Просмотр детальной информации о конкретном коммите:
git show
показывает информацию о коммите, включая метаданные коммита (автор, дата, хэш), сообщение коммита и изменения, внесенные в рамках этого коммита.При использовании без аргументов (git show
) команда покажет информацию о последнем коммите.
Опции:
p
: Показывает изменения, внесенные в рамках коммита в виде патча.-stat
: Показывает статистику о файлах, измененных в рамках коммита.s
: Выводит краткую информацию о коммите без патча.