Git для новичков

Базовые команды и принципы

Практика на основе проекта Java

Если вы еще не используете Git - сейчас самое время начать.
Знания Git уже является обязательными для всех, кто ищет работу разработчика или создает крупный проект. Это стандарт в мире программирования.

Что такое "система контроля версий"?

Version Control System, VCS – это приложение, которое умеет хранить историю версий файлов и позволяет вернуться (откатиться) к любой версии.

Тем самым вы никогда не потеряете свой проект и сможете работать с ним из любого места, где есть интернет.

Что такое Git?

Git – самое популярный инструмент для работы с VCS, его используют 90%  разработчиков ПО.

Создатель – Линус Торвальдс (который придумал Linux), 2005 год.

Git изначально сразу создавался для IT сферы, поэтому многие возможности направлены на программистов: совместная работа над одним файлом, безопасность, ограничения, права и многое другое.

Нужен ли вам Git?

Если вы задаете себе такой вопрос - значит вы никогда не работали с Git. Потому что если вы хорошо научились с ним работать - вы всегда будете использовать его в своих проектах по-умолчанию, т.к. он помогает в разработке и ускоряет все процессы.

Возможности Git:


- реализует концепцию распределенной VCS
- можно использовать для любых файлов, папок
- имеет большие возможности для командной разработки
- поддерживает все популярные среды разработки (IDE)

Удобство

Не нужно делать ручные бекапы проектов и сохранять архивы (как это делают многие). Для этого есть Git

Возможности

Почти все, что нужно для хранения версий проекта - все доступно бесплатно из коробки Git - нужно просто пользоваться

Командная работа

Если вы работает в команде - то без Git точно не обойтись. Все крупные компании используют какую-либо VCS

Облако

Вы можете работать со своим проектом из любого места, где есть интернет, а не только дома, т.к. все хранится в облаке

НАПОМИНАНИЕ

Ошибка новичков

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

Но так не бывает. Будет каша в голове.

Поэтому нужно идти последовательно - от простого к сложному.

ПОСЛЕДОВАТЕЛЬНОСТЬ

КАК ПРАВИЛЬНО ИЗУЧАТЬ GIT?

КАК ЛУЧШЕ ВСЕГО
ИЗУЧАТЬ GIT НОВИЧКАМ

Сама по себе Git не такая простая система, как многим хотелось бы.
Поэтому лучше не усложнять себе жизнь и всегда максимально упрощать.

1

Одна папка и один файл - базовые действия

Сначала можно просто потренироваться на одном единственном файле. Вы сможете выучить уже более половины базовых операций - и все это на простом примере.
2

Несколько папок и файлов - повтор операций

Постепенно можно добавлять другие файлы и папки - чтобы использовать новые операции (сравнение, откаты и пр.)
3

Усложняете операции на тех же файлах

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

Создаете простой проект в IDEA для практики

Теперь уже можно переходить к любой IDE и там с помощью кнопок выполнять те же самые операции на основе проекта. Вы уже полностью будете понимать что происходит.
5

Подключаете удаленный репозиторий на GitHub

Это самый последний шаг - добавление удаленного репозитория и синхронизация всех файлов между разными рабочими местами.
Можно ли самому изучить Git?

Да, как и любую другую технологию. Просто на это может уйти очень много времени.

Основная проблема в обучении Git - непонятно на что нужно сделать упор, а что пока можно пропустить. Какие особенности нужно понимать, как получить практику.

У вас есть возможность стартовать с места в карьер - для этого пройдите новый курс.

НОВЫЙ КУРС

СПЕЦИАЛЬНО ДЛЯ НОВИЧКОВ
МЫ ВЫПУСТИЛИ НОВЫЙ ПОДРОБНЫЙ КУРС ПО GIT

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

Git и разработка кода - это уже 2 неразлучных понятия, и если вы до сих пор еще не умеете работать с VCS - сейчас самое время начать.

Чему научитесь?

Вы изучите все главные команды Git. Но не наобум, как многие, а последовательно, чтобы не запутаться. 

Затем на основе простого Java проекта IDEA будете закреплять весь пройденный материал - разработка функционала с версионностью Git.

Чем отличается от других подобных курсов?

Все уроки усложняют материал последовательно, а не бросают с головой в омут, как это часто бывает.

Вы начнете с базовых операций в консоли, затем изучите основные концепции, потом более сложные принципы и т.д.

Также обязательно рассмотрите операции Git на Java проекте в IDEA.

ПОДРОБНОЕ ОБЪЯСНЕНИЕ

Каждый шаг будем делать без прыжков - чтобы было понятно любому новичку

ПРИМЕР ПРОЕКТА С GIT

Помимо просто практических команд у вас будет тренировка на основе проекта в IDEA

ОТ ПРОСТОГО К СЛОЖНОМУ

Сразу с головой не будем прыгать в сложные темы. Лучше изучать постепенно.

ДЛЯ НОВИЧКОВ

Информация подается для новичков, поэтому супер сложные вещи проходить не будем. Это лучше делать отдельно.

ТЕМЫ

ОСНОВНЫЕ ТРИ
НАПРАВЛЕНИЯ КУРСА

Главные команды Git на обычных файлах - в консоли Git Bash

Большая часть, где вы будете работать только в консоли, привыкать к основным командам. Сразу переходить к IDEA нельзя, т.к. не будете знать всю "внутреннюю кухню"

Работа с Git в IntelliJ IDEA на основе простого проекта по шагам

Тренировка на основе простого проекта, где по шагам будете создавать функционал и сразу использовать все основные Git возможности

Работа с удаленным репозиторием GitHub из IntelliJ IDEA

Синхронизация с удаленным репозиторием, чтобы вы могли работать над проектом из любого места. Также любой человек тоже сможет дорабатывать ваш проект.

Какие уроки вы пройдете

Что такое "система контроля версий"

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

Типы VCS

Существует несколько типов VCS. Это важно понимать, чтобы выбрать правильное приложение.

Что такое репозиторий

Место, где VSC хранит всю информация о ваших файлах: версии, метаданные, ветки, логи и пр.

Что такое Git

Git изначально сразу создавался для IT сферы, поэтому многие возможности направлены на программистов: совместная работа над одним файлом, безопасность, ограничения, права и многое другое.

Как правильно изучать Git

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

Установка Git с настройками

Установка непростая, т.к. много опций нужно выбрать - эти настройки можно изменять и после установки

Создание репозитория - init

Репозиторий создается в определенном каталоге (папке) – после этого папка находится по управлением Git: вы можете изменять файлы, удалять, добавлять и сохранять версии.

Статус репозитория - status

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

Изменение конфигурации - config

Желательно заранее указать все нужные настройки, чтобы дальше уже не отвлекаться на них. Можно также изменять все настройки, которые выставляли при установке Git.

Подготовка к версионности - add

Для того, чтобы указать гиту, для каких файлов вы хотите сохранять версии – нужно выполнить команду add

Сохранение версии - commit

Git сам автоматически НЕ сохраняет изменения в ваших файлах, вы должны явно выполнить для этого команду commit (переводится как “фиксация”).

Идентификатор коммита

При создании фиксации (commit) – для нее автоматически генерируется специальный идентификатор (хеш значение). По этому идентификатору вы сможете обращаться к этому коммиту в разных командах

Замена последнего commit --amend

Вы можете “заменить” последний коммит новым, исправленным. При этом hash идентификатор коммита в истории изменится.

Концепция веток в Git - branch

Каждый коммит должен принадлежать какой-либо ветке (либо он может быть утерян, т.к. никуда не привязан – в конце концов он будет удален “сборщиком мусора” как в Java)

Указатели на ветку и commit - HEAD

При добавлении нового коммита указатель HEAD автоматически переместит указатель на него (т.е. будет сам двигаться вверх).

Snapshot вместо Revision

В отличие от других VCS например Subversion – Git хранит не отличия для каждого файла (дельта, Revision), а слепок, моментальный снимок сразу всех файлов – Snapshot.

Помощь и подсказки по командам

Как правильно изучать команды Git, чтобы понимать их работу, параметры, возможные значения

Три дерева Git

“Три дерева” (“Three Trees”) – это три хранилища, между которыми перемещаются файлы во время работы в Git.

Разные значения файла в деревьях

Важный момент, о котором нужно обязательно помнить – значение файла может отличаться в деревьях (WD, Index, HEAD). Это понимание играет роль при восстановлении файлов и других операциях.

Commit только изменений из INDEX

Вы можете фиксировать изменения из WD (самые актуальные) или из INDEX.
Это важно понимать, потому что в коммит могут попасть ТОЛЬКО изменения из INDEX, а не текущие фактические значения файла в WD

Commit изменений из Working Directory

Если вам не нужен буфер INDEX и вы просто хотите зафиксировать все файлы (либо некоторые) напрямую из WD – можно использовать параметр -a.

Состояния файлов

При работе c Git – существуют разные состояния файлов. Если вы выполняете команду git add для untracked файлов – то они становятся tracked и добавляются в INDEX.

Визуальный инструмент Git GUI

Для удобства – можно работать не в консоли, а в готовом визуальном инструменте Git GUI (это приложение git–gui из каталога cmd установки Git)

Визуальная история коммитов

git-gui запускает приложение gitk из той же папки cmd. gitk отвечает за визуальное отображение истории коммитов.

Просмотр деревьев INDEX и WD в Git GUI

Проверим с помощью инструмента Git GUI наше утверждение из прошлых уроков, что значения файлов в деревьях INDEX и WD – могут отличаться.

Что главнее для коммита: WD или INDEX?

Команда commit без параметров – коммитит все изменения из INDEX. Команда commit -a (либо с конкретным указанием файлов) – коммитит все изменения из WD

Откат к старой версии из индекса - restore

Команда git restore восстанавливает значение файла в рабочем каталоге из источника (source)

Откат к старой версии из коммита - restore

Более частый вариант применение restore – это восстановление значения файла из какого-либо коммита (по идентификатору) – а не из INDEX (как команда работает по-умолчанию).

Откат папок и подпапок - restore

Для полного понимания – команда restore восстанавливает path – это все папки, подпапки с файлами. Если папка пустая – она не будет восстановлена. Если же в папке был файл – то папка восстановится.

Удаление файла из INDEX - restore

Также с помощью restore можно удалить файл из INDEX. Тем самым вы выполняете unstage

Откат к предыдущей версии - revert

revert – одна из нескольких команд, которая используется для отката к определенной версии файлов/папок. Но ей больше подходит слово “отмена”. Команда отменяет последовательно нужное количество коммитов (без их удаления).

Откат к любой версии - revert

Если вам нужно откатиться не к предыдущей версии, а к более ранней – это также можно сделать с помощью revert, но немного по-другому вызывать.

Откат к любой версии без commit - revert

Существует вариант, когда revert не создает новые коммиты (параметр -n) и тем самым вы не будете “забивать” историю, как это было в прошлом уроке, где на каждый revert создавался новый коммит.

Откат к версии и возврат обратно - checkout

checkout – популярная команда, которая позволяет откатить состояние файлов в нужную версию (текст, папки, файлы). Также она используется, чтобы переключаться между ветками (будем изучать далее).

Состояние Detached HEAD

Detached HEAD (отсоединенный указатель или “оторванная голова”) – означает, что сейчас указатель не привязан к какой-либо ветке (или иногда говорят “привязан к анонимной ветке”)

История указателей - reflog

Вы можете посмотреть историю всех коммитов, даже которые были в состоянии detached head. При необходимости можно обращаться к этим коммитам.

Откат с удалением истории коммитов - reset

Часто новички спрашивают – как удалить ненужные коммиты – для этого как раз и может применяться reset. Хотя вместо слова “удалить” правильно говорить “отсоединить от ветки"

Восстановление удаленных коммитов - reset

Восстановление цепочки удаленных коммитов нужно производить последовательно, друг за другом.

Скрипт diff для сравнения файлов

Основное назначение git diff – это сравнение и отображение разницы между двумя объектами:

Сравнение файлов WD и INDEX

Если запускать git diff просто без параметров – то сравниваются состояние файлов WD и INDEX.

Сравнение файлов WD и HEAD

Для того, чтобы сравнить состояние WD и HEAD – можно указать специальные параметры

Сравнение файлов INDEX и HEAD

Если вы используете буфер INDEX и добавили туда только нужные файлы для коммита (т.е. не все измененные файлы, а только нужные) – вы можете посмотреть разницу между ними и HEAD

Сравнение разных коммитов

Вы можете сравнивать между собой любые версии (коммиты) – чтобы понять чем они отличаются

Сравнение всех файлов

По-умолчанию git diff сравнивает состояние всех измененных файлов, и это может вернуть слишком много информации

Сравнение выборочных файлов

До сих пор мы рассматривали команду git diff, которая показывала все различия во всех найденных файлах.

Сравнение файлов в git-gui

Удобней смотреть различия файлов с помощью любого визуального редактора, например git-gui – это тот случай, когда лучше работать в приложении, чем в консоли

Сравнение файлов из любых папок

Вы можете использовать команду diff для сравнения вообще любых файлов или папок (например, нашли один и тот же проект в разных папках и хотите понять, в чем разница)

Информация о строках при сравнении

Чтобы понимать какие строки изменились - можно считывать служебную информацию.

Что такое Workflow

Существует большое количество “шаблонов” – как правильно организовать проект – какие ветви создавать (основная, для тестирования, для релизов и пр.) Все зависит от принципов компании, тимлида.

Создание новой ветки - branch

В новой ветке вы можете экспериментировать как угодно, не боясь повлиять на основную ветку. Если вы довели до рабочего состояния доп. ветку – можно выполнить слияние – все изменения попадают из доп. ветки в основную

Переключение между ветками - checkout

Во время работы можно переключаться между ветками. В этом случае состояние файлов будет сбрасываться на версию последнего коммита ветки.

Коммиты в новых ветках

При переключении на другую ветку – состояние файлов сбрасывается до версии последнего коммита ветки, на которую переключились.

Слияние веток - merge

Слияние может происходить между любыми ветками (не только с master). Для слияния – сначала нужно переключиться в ту ветку, куда хотите “слить” все изменения из другой ветки

Удаление ветки с коммитами

Если вы точно уверены, что вам не понадобятся коммиты из доп. ветки – вы можете ее удалить, чтобы не отвлекаться на эту ветку в дальнейшем

Создание ветки из Detached HEAD

Вы можете из состояния Detached HEAD создавать новые коммиты и добавлять их в новую ветку

Откладывание изменений - stash

Чтобы не потерять незакоммиченные изменения – их можно припрятать (временно). А чуть позже вернуть обратно в файлы.

Добавление Git в IDEA

Эти практические уроки нужно изучать только после прохождения основ Git. За основу возьмем задачу Music (легкий уровень), которую мы решали в курсе по ООП и основам Java:

Добавление файлов в статус tracked

Все нужные файлы добавим в состояние Tracked (отслеживаемые) – чтобы Git следил и управлял ими. Автоматически выполняется команда git add для нужных файлов/папок

Файл .ignore

Можно разом прописать в одном файле .gitignore все папки/файлы, на которые Git вообще не будет обращать внимание

Включение Staging area (INDEX) в IDEA

Если вы работаете с буфером INDEX и сначала отправляете туда все нужные изменения, а оттуда уже коммитите – то в IDEA нужно включить опцию (Staging area)

Коммиты в IDEA

Если вы не включали опцию Staging area – то при сохранении версии IDEA будет выполнять команду git commit -a -m "сообщение"

Окно Log истории коммитов

Можете настроить для себя окно Log, чтобы показывать только то, что нужно вам.

Практика Git на основе задачи Music Player

Решение задачи ООП с применением основных Git операций

Сравнение изменений перед коммитом

Вы сможете сравнить изменения между последним коммитом (HEAD и вашим текущим WD – т.е. что именно отправится в коммит.

Сравнение файла с любой версии истории

Вы можете сравнить текущее состояние ваших файлов (WD) с любой из версий истории (HEAD) – а не только с последним коммитом.

Сравнение любых версий из истории

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

Откат к версии: reset hard в IDEA

Во время разработки проекта вы можете вернуться (откатиться) в любую версию с помощью команды reset

Удаление коммита без потерь - reset soft (IDEA)

Частая ситуация – вы хотите удалить лишние коммиты из истории, но не хотите терять локальные изменения, потому что уже много чего добавили.

Добавление метки к работающей версии - tag

Чтобы выделить рабочую версию коммита среди всех остальных – можно добавить к ней tag (метку)

Работа с ветками из IDEA

Для того, чтобы попробовать реализовать что-то новое, но не портить главную ветку – можно создавать новую ветку и в ней проводить все эксперименты.

Слияние веток без конфликтов - merge

Самый идеальный вариант слияния веток – это когда не редактировались одни и те же строки и в мастер ветке не было новых коммитов после ответвления.

Слияние веток с конфликтами - merge

Наиболее частый вариант – это слияние веток с появлением конфликтов. Нужно их решить и завершить слияние.

Что такое GitHub

GitHub – облачный хостинг для создания удаленных распределенных репозиториев Git.

Создание удаленного репозитория GitHub

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

Добавление удаленного репозитория в IDEA

Чтобы успешно синхронизировать удаленный и локальный репозитории – нужно добавить аккаунт GitHub и ссылку на репозиторий

Отправка локальных данных в GitHub - push

Нужно выполнить команду push – чтобы отправить данные локального репозитория в удаленный (GitHub) – синхронизировать.

Добавление и отправка коммитов - push

Можно копить коммиты и потом разово отправлять их в удаленный репозиторий (push), а можно каждый коммит сразу отправлять.

Клонирование репозитория на "другом компьютере"

Вы можете работать с проектом из любых мест и компьютеров, где есть интернет. Для этого просто клонируете репозиторий из GitHub себе в папку. Главное, чтобы там были закоммичены все последние изменения.

Работа с проектом с разных компьютеров

Очень частая ситуация, когда с разных мест “прилетают” коммиты в удаленный репозиторий.

Запрос всех изменений - pull

Всегда выполняйте pull перед push, чтобы подкачать все изменения с удаленного сервера

merge конфликтов при работе с разных рабочих мест

Перед сохранением версии в общий репозиторий - нужно решить все конфликты

Демо версия
с бесплатными уроками

Вы можете попробовать первые бесплатные уроки из курса, чтобы понимать как подается информация, какие требования и многое другое.

Для прохождения - потребуется регистрация (если ранее еще не проходили).

В кабинете также доступны и другие бесплатные курсы.

Вопросы читателей

Примерно 3 недели - это время, чтобы получить главный фундамент и далее его развивать. Вы не сможете сразу научиться полностью на 100% применять Git, т.к. у него много особенностей. Но сможете спокойно использовать Git в своих проектах и начать командную разработку.

Материалы будут идти по нарастающей сложности. Сами темы - "от простого к сложному" - в конце уже будете применять многие профессиональные принципы. Но не слишком усложнять, т.к. просто будет непонятно.

Да, сможете изучать на любом компьютере, независимо от операционной системы. Можно даже смотреть видео на мобильных устройствах, но сам код придется создавать на компьютере/ноутбуке.

Все исходные коды есть, там где они должны быть. Можно будет открывать в IntelliJ IDEA. Но я рекомендую все равно набирать весь код и команды вручную.

Git может использоваться для любых типов проектов. Даже для обычных файлов.

Нет, для этого будет отдельный курс - полностью как работать с Git в команде.

Поддержка по всем вопросам

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

Будет доступна группа в телеграмме и также комментарии под каждым уроком.

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

Личный кабинет для обучения

После оплаты вам открывается курс в кабинете.
Доступ - без ограничений по времени. Сможете в любое время заходить и изучать обновленные уроки.

Исходные коды и архивы

Сможете открывать готовые проекты и исходные коды, чтобы посмотреть рабочий вариант.

Но лучше самому с нуля набивать все коды и команды, чтобы лучше запомнить.

КОМПЛЕКТЫ

СТОИМОСТЬ

Материалы + общая поддержка преподавателя (без коучинга)
5 000 р
  • Все материалы
  • Поддержка
  • Закрытая группа
  • Скайп встречи
  • Проверка кода
КОУЧИНГ
Материалы + личная поддержка
(скайп встречи)
-

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

В зависимости от вашего текущего уровня - вся программа будет построена под вас.

Вы намного быстрее пройдете весь путь до момента, когда сможете уже двигаться дальше.

Поддержка    Личный кабинет
E-mail: support@javabegin.ru
© Copyright 2021 JavaBegin 
Все права защищены