Осознать всю мощь и гибкость предлагаемых решений в Git довольно трудно даже для матерых профессионалов в своей области. В данной статье мы постараемся разобраться в нескольких опциях Git на практических примерах.
Сперва просмотрите большой обучающий ролик, позволяющий быстро и эффективно внедриться в систему Git и начать работать с ней уже сейчас:
Довольно часто мы забываем добавить файл или внести какое-то изменение в коммит. Если вы оказались в подобной ситуации, то не волнуйтесь, ничего плохого здесь нет. Просто исправьте последний коммит с помощью флажка — amend
.
Допустим, у вас есть следующие незафиксированные файлы:
Вы что-то в них меняете, а затем создаете коммит следующей командой:
git commit -m ‘First Commit’
Вдруг после создания коммита вы понимаете, что забыли внести какие-то исправления в файл FileB.txt. Тогда вместо создания нового коммита с изменениями FileB.txt можно обновить предыдущий коммит флажком — amend
:
git commit — amend
Какое-то время спустя вы вдруг решаете изменить сообщение для последнего коммита. Здесь вам тоже поможет флажок — amend
и следующая команда:
git commit —amend -m ‘First Commit Modified’
Довольно часто бывает так, что мы случайно отправляем какие-то изменения или файлы, которые совершенно не нужно добавлять в коммиты. Например, config файлы, подписи AWS или .pem
файлы. Их не нужно заливать в репозиторий. Для удаления .pem файлов с удаленного репозитория многие люди делают следующее:
По сути, .pem файл все еще присутствует в репозитории, ведь Git хранит все загруженные файлы. Поэтому любой может порыться в истории Git коммитов и получить доступ к .pem файлу.
Однако Git позволяет изменять историю. Поэтому для окончательного удаления .pem файлов можно вернуться к старому коммиту и принудительно перезаписать его. git reset HEAD~n
– это команда, которая позволяет откатываться к предыдущим n-коммитам. Поэтому git reset HEAD~2
вернет вас на 2 коммита назад и покажет их изменения. git reset HEAD — hard
удалит все изменения. Например, у вас есть следующие коммиты:
А теперь вам захотелось удалить 2 последних коммита: Add aws secrets и Add .pem file.
Для начала вы запускаете команду ниже и возвращаетесь на 2 коммита назад:
git reset HEAD~2
Теперь удаляете эти два коммита командой:
git reset HEAD — hard
Затем загружаете код на удаленный репозиторий. Вуаля – .pem файлы пропали из истории.
ВНИМАНИЕ:принудительная отправка изменений на сервер ОЧЕНЬ ОПАСНА, т.к. изменяет Git историю на удаленной ветке. Запомните раз и навсегда, что запрещено принудительно менять ветки master и stage. Следите, чтобы новые изменения заливались только в ветку, созданную вами, а вы сами понимали суть вносимых изменений.
Бывает, что необходимо отправить коллеге-разработчику какие-то изменения в коде, а сам код по ряду причин нельзя загрузить в удаленный репозиторий. В данном случае поможет патч. Вот, как он работает:
Внесите нужные изменения и выполните следующее:
git diff > filename.patch
Эта команда создает файл со всеми незафиксированными изменениями, которые вы вносите. Затем перешлите коллеге данный файл привычным способом: почта/Slack/скиньте на флешку и т.д.
Коллега скачивает файл с патчем и выполняет следующую команду:
git apply filename.patch
Так все ваши изменения применятся к коду, сохраненному у вашего коллеги.
Перемещение коммита – очень мощная функция Git. С ней вы можете выбрать определенный коммит из одной ветки и присоединить его к другой. Допустим, ветка develop на 3 коммита больше master. И из этих 3 коммитов лишь второй по счету нужно объединить с master. Вот, как это решается в Git:
checkout
.git cherry-pick
для присоединения выбранного коммита к ветке master.Примечание: Для просмотра созданных коммитов и их хешей используется команда git log.
Поэтому если в дальнейшем вы захотите объединить остаток ветки develop с master, то просто выполните следующую команду:
git rebase develop