-
1. Введение
- 1.1 О системе контроля версий
- 1.2 Краткая история Git
- 1.3 Что такое Git?
- 1.4 Командная строка
- 1.5 Установка Git
- 1.6 Первоначальная настройка Git
- 1.7 Как получить помощь?
- 1.8 Заключение
-
2. Основы Git
-
3. Ветвление в Git
- 3.1 О ветвлении в двух словах
- 3.2 Основы ветвления и слияния
- 3.3 Управление ветками
- 3.4 Работа с ветками
- 3.5 Удалённые ветки
- 3.6 Перебазирование
- 3.7 Заключение
-
4. Git на сервере
- 4.1 Протоколы
- 4.2 Установка Git на сервер
- 4.3 Генерация открытого SSH ключа
- 4.4 Настраиваем сервер
- 4.5 Git-демон
- 4.6 Умный HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git-хостинг
- 4.10 Заключение
-
5. Распределенный Git
-
6. GitHub
-
7. Инструменты Git
- 7.1 Выбор ревизии
- 7.2 Интерактивное индексирование
- 7.3 Припрятывание и очистка
- 7.4 Подпись результатов вашей работы
- 7.5 Поиск
- 7.6 Исправление истории
- 7.7 Раскрытие тайн reset
- 7.8 Продвинутое слияние
- 7.9 Rerere
- 7.10 Обнаружение ошибок с помощью Git
- 7.11 Подмодули
- 7.12 Создание пакетов
- 7.13 Замена
- 7.14 Хранилище учётных данных
- 7.15 Заключение
-
8. Настройка Git
- 8.1 Конфигурация Git
- 8.2 Атрибуты Git
- 8.3 Хуки в Git
- 8.4 Пример принудительной политики Git
- 8.5 Заключение
-
9. Git и другие системы контроля версий
- 9.1 Git как клиент
- 9.2 Миграция на Git
- 9.3 Заключение
-
10. Git изнутри
- 10.1 Сантехника и Фарфор
- 10.2 Объекты Git
- 10.3 Ссылки в Git
- 10.4 Pack-файлы
- 10.5 Спецификации ссылок
- 10.6 Протоколы передачи данных
- 10.7 Обслуживание репозитория и восстановление данных
- 10.8 Переменные окружения
- 10.9 Заключение
-
A1. Приложение A: Git в других окружениях
- A1.1 Графические интерфейсы
- A1.2 Git в Visual Studio
- A1.3 Git в Visual Studio Code
- A1.4 Git в Eclipse
- A1.5 Git в IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.6 Git в Sublime Text
- A1.7 Git в Bash
- A1.8 Git в Zsh
- A1.9 Git в Powershell
- A1.10 Заключение
-
A2. Приложение B: Встраивание Git в ваши приложения
- A2.1 Git из командной строки
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Приложение C: Команды Git
- A3.1 Настройка и конфигурация
- A3.2 Клонирование и создание репозиториев
- A3.3 Основные команды
- A3.4 Ветвление и слияния
- A3.5 Совместная работа и обновление проектов
- A3.6 Осмотр и сравнение
- A3.7 Отладка
- A3.8 Внесение исправлений
- A3.9 Работа с помощью электронной почты
- A3.10 Внешние системы
- A3.11 Администрирование
- A3.12 Низкоуровневые команды
A3.4 Приложение C: Команды Git - Ветвление и слияния
Ветвление и слияния
За создание новых веток и слияние их воедино отвечает несколько Git команд.
git branch
Команда git branch
— это своего рода "менеджер веток".
Она умеет перечислять ваши ветки, создавать новые, удалять и переименовывать их.
Большая часть главы Ветвление в Git посвящена этой команде, она используется повсеместно в этой главе.
Впервые команда branch
была представлена в разделе Создание новой ветки, а большинство таких её возможностей как перечисление и удаление веток были разобраны в разделе Управление ветками.
В главе Отслеживание веток мы показали как использовать сочетание git branch -u
для отслеживания веток.
Наконец, мы разобрались что происходит за кулисами этой команды в главе Ссылки в Git.
git checkout
Команда git checkout
используется для переключения веток и выгрузки их содержимого в рабочий каталог.
Мы познакомились с этой командой в главе Переключение веток вместе с git branch
.
В главе Отслеживание веток мы узнали как использовать флаг --track
для отслеживания веток.
В главе Использование checkout
в конфликтах мы использовали эту команду с опцией --conflict=diff3
для разрешения конфликтов заново, в случае если предыдущее решение не подходило по некоторым причинам.
Мы рассмотрели детали взаимосвязи этой команды и git reset
в главе Раскрытие тайн reset.
Мы исследовали внутренние механизмы этой команды в главе HEAD.
git merge
Команда git merge
используется для слияния одной или нескольких веток в текущую.
Затем она устанавливает указатель текущей ветки на результирующий коммит.
Мы познакомили вас с этой командой в главе Основы ветвления.
И хотя git merge
встречается в этой книге повсеместно, практически все использования имеют вид git merge <branch>
с указанием единственной ветки для слияния.
Мы узнали как делать «сплющенные» слияния (когда Git делает слияние в виде нового коммита, без сохранения всей истории работы) в конце главы Форк публичного проекта.
В главе Продвинутое слияние мы глубже разобрались с процессом слияния и этой командой, включая флаги -Xignore-all-whitespace
и --abort
, используемый для отмены слияния в случае возникновения проблем.
Мы научились проверять криптографические подписи перед слияниями если ваш проект использует GPG в главе Подпись коммитов.
Ну и наконец в главе Слияние поддеревьев мы познакомились со слиянием поддеревьев.
git mergetool
Команда git mergetool
просто вызывает внешнюю программу слияний, в случае если у вас возникли проблемы слияния.
Мы вкратце упомянули о ней в главе Основные конфликты слияния и рассказали как настроить свою программу слияния в главе Внешние программы слияния и сравнения.
git log
Команда git log
используется для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта.
По умолчанию, она показывает лишь историю текущей ветки, но может быть настроена на вывод истории других, даже нескольких сразу, веток.
Также её можно использовать для просмотра различий между ветками на уровне коммитов.
Практически во всех главах книги эта команда используется для демонстрации истории проекта.
Мы познакомились c git log
и некоторыми её деталями в главе Просмотр истории коммитов.
Там мы видели использование опций -p
и --stat
для получения представления об изменениях в каждом коммите, а также --pretty
and --oneline
для настройки формата вывода этой команды — более полным и подробным или кратким.
В главе Создание новой ветки мы использовали опцию --decorate
чтобы отобразить указатели веток на истории коммитов, а также --graph
чтобы просматривать историю в виде дерева.
В главах Небольшая команда и Диапазоны коммитов мы рассмотрели синтаксис branchA..branchB
для просмотра уникальных для заданной ветки коммитов.
Мы часто использовали этот приём в Диапазоны коммитов.
В главах История при слиянии и Три точки мы рассмотрели синтаксис branchA…branchB
и опцию --left-right
для просмотра что находится в первой, либо второй ветке, но не сразу в обеих.
Также в главе История при слиянии рассмотрели опцию --merge
, которая может быть полезной при разрешении конфликтов, а также --cc
для просмотра конфликтов слияния в истории проекта.
В главе RefLog-сокращения мы использовали опцию -g
для вывода git reflog
, используя git log
.
В главе Поиск мы рассмотрели использование опций -S
и -L
для поиска событий в истории проекта, например, истории развития какой-либо фичи.
В главе Подпись коммитов мы показали, как использовать опцию --show-signature
для отображения строки валидации подписи для каждого коммита в git log
.
git stash
Команда git stash
используется для временного сохранения всех незафиксированных изменений с целью очистки рабочего каталога без необходимости фиксировать незавершённую работу в текущей ветке.
Эта команда практически целиком раскрыта в главе Припрятывание и очистка.
git tag
Команда git tag
используется для задания постоянной метки на какой-либо момент в истории проекта.
Обычно она используется для релизов.
Мы познакомились и разобрались с ней в главе Работа с метками и использовали на практике в Помечайте свои релизы.
Мы научились создавать подписанные с помощью GPG метки, используя флаг -s
, и проверять их, используя флаг -v
, в главе Подпись результатов вашей работы.