Skip to content

Latest commit

 

History

History

lecture_2

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

о чем говорим сегодня?

  • научимся создавать ветки
  • научимся откладывать изменения до лучших времен
  • поговорим о каноничном workflow
  • немного tips&tricks

ветвление (branches)

немного команд

  • git checkout -b develop - создать новую ветку develop и переключиться на нее
  • git branch - показать все ветки
  • git checkout master - переключиться на главную ветку
  • git merge <branch> - слить текущую ветку с веткой <branch>
  • git branch -d <branch> - удалить ветку
  • -D - принудительно удалить ветку
  • git merge <branch> --squash - при слиянии веток собрать несколько коммитов в один

создадим ветку develop

git checkout -b develop

и посмотрим, какие ветки у нас теперь есть:

git branch

внесем в эту ветку изменения

например, поменяем файл hello.txt и закоммитим его новое состояние

таким образом, у нас есть две версии файла hello.txt, между которыми можно переключаться

чтобы наши изменения оказались в главной ветке, их надо слить

переключившись в ветку master, выполним:

git merge develop

Разница между git merge --no-ff и git merge

заначки (stash)

немного команд

  • git stash - спрятать свои правки
  • git stash apply - применить изменения к текущей версии
  • git stash list - вывести список изменений
  • git stash show - вывести последние изменения
  • git stash drop - удалить последние изменения в списке
  • git stash pop - [apply] + [drop]
  • git stash clear - очистить список изменений

допустим, в главном репозитории полным ходом идет разработка

мы, в свою очередь, тоже не отстаем и изо всех сил вносим изменения

в таком случае, при попытке получить актуальную версию кода, Git одарит нас ошибкой:

что же делать? -- прятать свой говнокод!

git stash

теперь мы можем скачать код из главного репозитория и попробовать применить свои изменения

git pull

git stash pop

путь только один -- исправлять конфликт ручками

для этого можно использовать редактор/IDE/специальные программы для решения конфликтов, аля Meld

когда конфликт разрешен, можно спокойно отправлять свой код в репозиторий

git workflow

главные ветки - master и develop

под каждый новый функционал - отдельную ветку feature от ветки develop

git checkout -b my_feature develop

если в программе обнаруживается неисправность, требующая срочных исправлений - создается ветка hotfix от master, которая потом сливается и с master, и с develop

git checkout -b hotfix master

git checkout master

git merge --no-ff hotfix

git branch -d hotfix

semantic versioning

ТЭГ == Релиз, используется для фиксирования версий вашего ПО

немного команд

  • git tag <name> - создать тэг (например, v1.3.1)
  • git push --tags - залить все тэги в репозиторий
  • git push <tag> - залить конкретный тэг в репозиторий

Номер версии в формате MAJOR.MINOR.PATCH задается следующим образом:

  1. MAJOR версия - увеличивается, когда сделаны обратно несовместимые изменения API (крупные релизы)
  2. MINOR версия - увеличивается, когда добавляется новый функционал, не нарушающий обратной совместимости (новые фичи)
  3. PATCH версия - увеличивается, когда вы делаете обратно совместимые исправления (исправления, фиксы)

tips&tricks

  • если допущена ошибка при создании коммита (не те файлы, не тот комментарий), её можно откатить
git reset --soft HEAD^
  • если нужно посмотреть содержимое другой ветки, а в текущей есть файлы, еще не добавленные в Index:
git stash save --include-untracked
  • если отредактировано много файлов и добавлять сразу все НЕ хочется, то можно использовать git add -i

  • файл .gitignore содержит описание файлов, которые git не будет отслеживать
    • например, если мы не хотим, чтобы в репозитории хранилась папка .idea и все файлы формата dll, то пишем:
      • .idea/
      • *.dll

  • git log - посмотреть историю коммитов в проекте

  • git lg - один из альтернативных вариантов истории коммитов, более наглядный для его использования надо создать алиас:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

  • использование GUI клиентов ¯\_(ツ)_/¯

  • GitExtensions

  • использование GUI клиентов ¯\_(ツ)_/¯

  • GitKraken

  • использование GUI клиентов ¯\_(ツ)_/¯

  • SourceTree

ДЗ

создать в своем форке репозитория myfirstproject новую ветку, накуролесить в ней, слить с главной и отправить Pull Request

всякий референс

Git

Ветвление

Заначка

Воркфлоу и версии