Git

VCS - Version Control System

Репозиторий программного кода позволяет команде совместно работать над проектом, автоматически разрешает большое количество конфликтов совместного редактирования. Позволяет фиксировать состояние при помощи тегов и вести разработку в отдельных ветках. Объединять изменения сделанные в различных ветках и репозиториях, получать доступ к истории изменений.

По структуре репозитория можно сделать вывод о профессиональном уровне разработчиков. Так в частности анализируется:

  • Как команда работает с репозиторием (gitflow, теги для релизных версий, организация ветвления)

  • Как команда пишет комментарии к комитам

    • Являются ли комиты атомарными (только одно изменение за раз или комментарий об одном а изменения в том числе о другом)

Области для изучения

  • Cherry pick - выборочный перенос комитов других веток в текущую

  • Squash - объединение связанных комитов

Git сценарии

  • git revert - делает новый коммит, в котором отменяет все изменения из указанного: git revert <хэш коммита>

  • Если вы сделали коммит, но забыли внести в него некоторые файлы, вы можете отменить коммит, сохранив все ваши изменения на диске: git reset --soft HEAD~1

  • Чтобы удалить последний коммит вместе с изменениями в файлах, вы можете воспользоваться командой: git reset --hard HEAD~1

  • Вы также можете откатить несколько последних коммитов. К примеру: git reset --hard HEAD~3

  • Если вы сделали коммит не в той ветке, вы можете легко скопировать его в нужную, используя команду: git cherry-pick <хэш коммита>

  • Если вы случайно закоммитили файл, который не должен был попасть в индекс репозитория (например, конфигурационный файл или лог), добавление его в .gitignore уже не поможет. Все будущие изменения этого файла будут фиксироваться Git-ом. Чтобы убрать файл из индекса, не удаляя его из директории, можно использовать следующую команду: git rm --cached path-to/file.txt

  • git pull --rebase # забрать изменения и свои незалитые файлы расположить поверх

  • создаем некую ветку на основании бренча develop для реализации новой фичи git checkout -b my_feature develop

  • Флаг --no-ff вынуждает Git всегда создавать новый объект коммита при слиянии, даже если слияние может быть осуществлено алгоритмом fast-forward. Это позволяет не терять информацию о том, что ветка существовала, и группирует вместе все внесённые изменения.

  • Добавить что то к предыдущему комиту git commit -amend

  • Текущее состояние индекса можно посмотреть командой git status:

  • Посмотреть комиты в удаленный репозиторий git log

Дополнительные источники

Last updated