Изучение Git на реальных примерах

Изучение Git на реальных примерах

Осознать всю мощь и гибкость предлагаемых решений в Git довольно трудно даже для матерых профессионалов в своей области. В данной статье мы постараемся разобраться в нескольких опциях Git на практических примерах.


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



Пример 1: Забыли внести правки в предыдущий коммит/нужно изменить сообщение коммита

Довольно часто мы забываем добавить файл или внести какое-то изменение в коммит. Если вы оказались в подобной ситуации, то не волнуйтесь, ничего плохого здесь нет. Просто исправьте последний коммит с помощью флажка  — amend.


Допустим, у вас есть следующие незафиксированные файлы:

  • FileA.txt
  • FileB.txt


Вы что-то в них меняете, а затем создаете коммит следующей командой:

git commit -m ‘First Commit’

Вдруг после создания коммита вы понимаете, что забыли внести какие-то исправления в файл FileB.txt. Тогда вместо создания нового коммита с изменениями FileB.txt можно обновить предыдущий коммит флажком  — amend:

git commit — amend

Какое-то время спустя вы вдруг решаете изменить сообщение для последнего коммита. Здесь вам тоже поможет флажок  — amend и следующая команда:

git commit —amend -m ‘First Commit Modified’


Пример 2: Отправили изменения, которые не нужно фиксировать в коммитах

Довольно часто бывает так, что мы случайно отправляем какие-то изменения или файлы, которые совершенно не нужно добавлять в коммиты. Например, config файлы, подписи AWS или .pem файлы. Их не нужно заливать в репозиторий. Для удаления .pem файлов с удаленного репозитория многие люди делают следующее:

  • Вытаскивают последний код из репозитория.
  • Удаляют .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. Следите, чтобы новые изменения заливались только в ветку, созданную вами, а вы сами понимали суть вносимых изменений.


Пример 3: Поделиться частью зависимого кода, которую пока что нельзя отправлять

Бывает, что необходимо отправить коллеге-разработчику какие-то изменения в коде, а сам код по ряду причин нельзя загрузить в удаленный репозиторий.  В данном случае поможет патч. Вот, как он работает:


Внесите нужные изменения и выполните следующее:

git diff > filename.patch


Эта команда создает файл со всеми незафиксированными изменениями, которые вы вносите. Затем перешлите коллеге данный файл привычным способом: почта/Slack/скиньте на флешку и т.д.


Коллега скачивает файл с патчем и выполняет следующую команду:

git apply filename.patch


Так все ваши изменения применятся к коду, сохраненному у вашего коллеги.


Пример 4. Перемещение коммита в другую ветку

Перемещение коммита – очень мощная функция Git. С ней вы можете выбрать определенный коммит из одной ветки и присоединить его к другой. Допустим, ветка develop на 3 коммита больше master. И из этих 3 коммитов лишь второй по счету нужно объединить с master. Вот, как это решается в Git:

  • Шаг 1: Переключаемся на ветку master через checkout.
  • Шаг 2: Выполняем git cherry-pick  для присоединения выбранного коммита к ветке master.


Примечание: Для просмотра созданных коммитов и их хешей используется команда git log.


Поэтому если в дальнейшем вы захотите объединить остаток ветки develop с master, то просто выполните следующую команду:

git rebase develop
()
3 Декабря 2018

Возврат к списку