Git. Описание команд

Git – распределённая система управления версиями. Статья описывает часто используемые команды необходимые для комфортной работы с Git.

Основные команды

Загрузка репозитория

git clone https://bitbucket.org/cesbo/astra

чтобы загрузить определённую ветку:

git clone -b BRANCH https://bitbucket.org/cesbo/astra

Загрузка новых изменений из репозитория

git pull

Просмотр изменений

git status

Показывает три группы файлов:

  1. Changes to be committed – файл помечен для добавления в коммит. Чтобы исключить файл из коммита
  2. Changes not staged for commit – файлы с изменениями. Изменения можно отменить Сброс изменений или пометить на добавление в коммит
  3. Untracked files – файлы не добавленные в репозиторий

Просмотр лога

git log

Сброс изменений

git checkout -- PATH
git checkout -- .

Создание патча

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

git diff [PATH] >PATCH

Применение патча

cat PATCH | patch -p1

Можно совместить загрузку и применение патча:

curl http://example.com/test.patch | patch -p1

Коммит

Коммит – сохранённые изменения с описанием

Важно! изменение в коммитах можно выполнять только в локальном репозитории. Если коммиты были отправлены в общий репозиторий, то изменения вносить запрещено.

Создание

Добавление в коммит всех изменённых файлов:

git commit -am "description"

Файл не будет добавлен в коммит если он не относится к репозиторию - в группе файлов "Untracked files". Чтобы добавить новый файл в репозиторий, необходимо выполнить команду:

git add [PATH]

Добавление в коммит только определённых файлов:

git commit -m "описание" [PATH]

Переход между коммитами

git checkout COMMIT

Например для перехода на 2 коммта назад относительно текущего коммита, необходимо выполнить:

git checkout HEAD^^

Отмена изменений

Отмена одного или нескольких коммитов с сохранением изменений

git reset --soft COMMIT

Отмена коммитов с удалением всех изменений:

git reset --hard COMMIT

Добавление изменений

Для изменения описания последнего коммита или добавления файлов в последний коммит:

git commit --amend

При добавлении файлов, необходимо выполнить: git add [PATH] - пометить файл для добавления в коммит.

Объединение

Объединение нескольких коммитов в один:

git rebase -i COMMIT

После запуска комманды появится редактор:

pick 877a413 commit 4
pick bb3031a commit 3
pick ad64e80 commit 2
pick ef43d0e commit 1
...

У первого коммита 877a413 остаётся команда pick, у остальных необходимо изменить команду на squash. После сохранения и выхода из редактора, запустится второй редактор, в нём будут перечислены описания объединямых коммитов, из них необходимо сформировать текст для нового коммита.

Ветвление

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

Просмотр доступных веток

git branch -a

Вывод команды:

* master
custom
remotes/origin/feature

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

При создании нового бранча происходит автоматическое переключение на него. Создание ветки custom на основе локальной ветки master:

git checkout -b custom master

Создание ветки в локальном репозитории на основе ветки из удалённого репозитория:

git checkout -tb BRANCH REMOTE

Добавление изменений в ветку

Пример: в общую ветку master были внесены изменения, эти изменения необходимо перенести в ветку custom

git checkout master
git pull --rebase origin
git checkout custom
git rebase master
  1. переключение в основной бранч master
  2. получение изменений из основного репозитория
  3. переключение в бранч custom
  4. слияние изменений. При слиянии возможен Конфликт версий. Важно! git rebase можно использовать только для локальной ветки

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

git checkout master
git merge --no-ff custom
  1. переключение в основной бранч
  2. слияние изменений. При слиянии возможен Конфликт версий

Для слияния веток без создания коммита, необходимо указать параметр --no-commit. Можно использовать для исключения определённых файлов PATH. Например:

git checkout master
git merge --no-ff --no-commit custom
git checkout master PATH
git commit -a

Конфликт версий

Если во время слияния происходит конфликт версий, выводится строка

CONFLICT (content): Merge conflict in <file>

В файл будут внесена информаци о конфликтной ситуации. Например при слиянии веток custom и master:

<<<<<<< HEAD
// Changes in master branch
=======
// Changes in custom branch
>>>>>>> foo version commit

Необходимо выбрать нужный кусок кода или доработать в соответствии с ситуацией. После редактирования:

git add [PATH]
git rebase --continue
  1. пометить файл
  2. продолжить слияние

Переименование ветки

Переименование локальной ветки:

git branch -m OLD-NAME NEW-NAME

Применение изменений в удалёном репозитории:

git push origin :OLD-NAME
git push origin NEW-NAME
  1. удалить старую ветку
  2. создать новую ветку

Удаление ветки

Удалить ветку в локальном репозитории:

git branch -d NAME

Удалить ветку в удалённом репозитории:

git push origin :NAME

Модули

Загрузка субмодулей

git submodule update --init --recursive

Обновление субмодулей

git submodule update --recursive --remote