/ DEV

Git - исправление ошибок в коммитах

Рассмотрим, как исправить ошибки в коммитах и привести в порядок историю коммитов. Предполагается, что вы уже знакомы с основами Git.

Допустим, вы решили, что сообщение последнего коммита получилось недостаточно развернутым. Чтобы его отредактировать, воспользуйтесь командой git commit --amend. Например:

git commit --amend -m "New commit message"

Если вы добавили в коммит не все файлы, можно это исправить, просто создав новый коммит и добавив туда недостающие. Или снова воспользоваться командой git commit --amend:

git add file6
git commit --amend --no-edit

Флаг --no-edit означает, что сообщение коммита не меняется.

Если вы не добвили в git config user данные пользователя и уже сделали коммит, исправить положение поможет уже знакомая нам команда amend:

git commit --amend --author "Author Name <Author Email>"

Помните, не рекомендуется использовать amend за пределами локального репозитория, на удаленном сервере это может создать много ненужных трудностей.

Чтобы избегать конфликтов, связанных со слиянием, возникающих при слишком редкой синхронизации между локальным и удалённым репозиториями, мы периодически загружая изменения с сервера создаем новые Merge Commit. Они создают путаницу для других разработчиков и для решения этой проблемы можно воспользоваться командой git rebase.

В ветке Release есть три коммита: Rcommit1, Rcommit2, и Rcommit3. Вы создали свою ветку Feature из ветки Release, когда в ней был всего один коммит — Rcommit1. После этого вы добавили два коммита в ветку Feature. Это — Fcommit1 и Fcommit2. Ваша цель заключается в том, чтобы загрузить коммиты из ветки Release в свою ветку Feature.

Для того чтобы это сделать, вы собираетесь воспользоваться командой rebase.

git checkout feature
git rebase release

При применении этой команды система пытается добавить в ветку Feature каждый коммит, по одному, и осуществить проверку на наличие конфликтов. При обнаружении конфликта Git сообщит об этом и вам придётся разрешить этот конфликт вручную.

После завершения работы команды rebase можно будет увидеть, что в ветке Feature имеются коммиты Rcommit1, Rcommit2, Rcommit3, Fcommit1, и Fcommit2.

В случае использования команды merge вы получите коммит-слияние. В случае использования rebase никаких дополнительных коммитов у вас не будет. Используйте эти команды в зависимости от ситуации.