Изучите 6 продвинутых команд Git: merge, rebase, amend, push --force-with-lease, rebase -i и stash. Практические примеры и советы. Начните применять их сегодня!
Вы уже уверенно используете git add, commit, pull и push? Тогда пришло время освоить команды, которые отличают опытного разработчика от новичка. В этой статье я разберу шесть мощных инструментов Git: от правильного использования merge и rebase до секретов интерактивного rebase. Вы узнаете, как избежать конфликтов, безопасно переписывать историю и не терять незавершённую работу. Эти навыки пригодятся вам каждый день в реальных проектах.
Многие разработчики, даже с опытом, используют merge и rebase как взаимозаменяемые. Но они работают по-разному. Представьте, что у вас есть ветка feature, ответвлённая от main, а в main появился новый коммит C:
A---B---C main
\
D---E featureКогда вы выполняете git merge main в ветке feature, Git объединяет обе истории. Появляется merge-коммит M:
A---B---C------M
\ /
D---E---История остаётся нетронутой: видно, что ветки развивались независимо. Плюс — сохраняется реальная картина. Минус — при частых merge история превращается в «спагетти».
Команда git rebase main временно убирает ваши коммиты D и E, переносит ветку на актуальный main и заново применяет ваши изменения:
A---B---C---D'---E'Чисто и линейно. Но обратите внимание на апострофы: D' и E' — это новые коммиты с новыми хэшами. Rebase переписывает историю. Поэтому правило: перебазируйте только свою работу. Если другие разработчики уже базируются на ваших коммитах, rebase создаст хаос.
И merge, и rebase могут вызывать конфликты. При merge вы решаете конфликт один раз, затем:
git add .
git merge --continueПри rebase Git применяет коммиты по одному, поэтому конфликты могут возникать несколько раз. Это раздражает, но есть спасение:
git merge --abort
git rebase --abortЭти команды возвращают всё в исходное состояние.
Вы сделали идеальный коммит, но забыли убрать console.log или добавить файл. Вместо нового коммита «Remove console log» используйте amend:
git add forgotten-file.ts
git commit --amend --no-editФлаг --no-edit сохраняет прежнее сообщение. Если нужно изменить и сообщение, просто выполните git commit --amend — откроется редактор.
Важно: amend создаёт новый коммит с новым хэшем. Если ветка уже запушена, потребуется force-push. Но сначала прочитайте следующий пункт.
После rebase или amend локальная история отличается от удалённой. Обычный git push выдаст ошибку. Многие используют git push --force, но это опасно: вы перезаписываете удалённую ветку, даже если кто-то уже добавил туда коммиты.
Вместо этого используйте git push --force-with-lease. Эта команда проверяет, не изменилась ли удалённая ветка с момента вашего последнего взаимодействия. Если изменилась — push будет отклонён, и вы не потеряете чужие изменения.
Всегда предпочитайте --force-with-lease обычному --force.
Интерактивный rebase позволяет переписать историю ваших коммитов. Допустим, у вас есть пять коммитов, и вы хотите их объединить или переименовать:
git rebase -i HEAD~5Откроется редактор со списком коммитов:
pick a111111 Add login form
pick b222222 Add validation
pick c333333 Fix typo
pick d444444 Fix validation
pick e555555 Remove debug logВы можете заменить pick на другие команды:
Например, чтобы объединить три коммита в один:
pick a111111 Add login form
squash b222222 Add validation
squash c333333 Fix validationВ итоге получится один коммит с чистым сообщением.
Мнения о необходимости чистить историю расходятся. Но если вы хотите сохранить логические коммиты, а не один огромный, интерактивный rebase незаменим.
Вы работаете над фичей, и тут срочный баг в проде. Незавершённую работу коммитить не хочется. Решение — git stash:
git stashGit сохранит ваши изменения и вернёт рабочую директорию в чистое состояние. Теперь можно переключиться на другую ветку и исправить баг. Вернуть изменения:
git stash popПо умолчанию stash сохраняет только отслеживаемые файлы. Если нужно добавить и новые файлы, используйте git stash -u.
Освоение этих команд — важный шаг к профессиональной работе с Git. Начните с малого: замените обычный git push --force на --force-with-lease в своих проектах. Затем попробуйте git commit --amend для исправления мелких ошибок. И постепенно внедряйте интерактивный rebase для поддержания чистой истории.
Поделитесь в комментариях, какие команды Git вы используете чаще всего? А если хотите больше подобных материалов, подписывайтесь на наш блог — впереди много полезного!
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →