Основы Git


Git и Git Flow

Шпаргалка по Git

Индекс

  • Настройка
  • Файлы конфигурации
  • Создайте
  • Локальные изменения
  • Поиск
  • История коммитов
  • Ветви и метки
  • Обновить & Опубликовать
  • Слияние & Rebase
  • Отменить
  • Git Flow

Настройка

Показать текущую конфигурацию:
$ git config --list
Войти в полноэкранный режим Выход из полноэкранного режима
Показать конфигурацию репозитория:
$ git config --local --list
Войти в полноэкранный режим Выход из полноэкранного режима
Показать глобальную конфигурацию:
$ git config --global --list
Войти в полноэкранный режим Выход из полноэкранного режима
Показать конфигурацию системы:
$ git config --system --list
Войти в полноэкранный режим Выход из полноэкранного режима
Задайте имя, которое можно использовать для зачета при просмотре истории версий:
$ git config --global user.name “[firstname lastname]”
Войти в полноэкранный режим Выйти из полноэкранного режима
Установите адрес электронной почты, который будет связан с каждым маркером истории:
$ git config --global user.email “[valid-email]”
Войти в полноэкранный режим Выйти из полноэкранного режима
Установите автоматическое раскрашивание командной строки для Git’а для удобства просмотра:
$ git config --global color.ui auto
Войти в полноэкранный режим Выйти из полноэкранного режима
Установить глобальный редактор для фиксации
$ git config --global core.editor vi
Войти в полноэкранный режим Выйти из полноэкранного режима

Файлы конфигурации

Конфигурационный файл, специфичный для репозитория [—local]:
<repo>/.git/config
Войти в полноэкранный режим Выйти из полноэкранного режима
Конфигурационный файл для конкретного пользователя [—global]:
~/.gitconfig
Войти в полноэкранный режим Выход из полноэкранного режима
Общесистемный файл конфигурации [—system]:
/etc/gitconfig
Войти в полноэкранный режим Выйти из полноэкранного режима

Создать

Клонирование существующего хранилища:

Есть два способа:

Через SSH

$ git clone ssh://user@domain.com/repo.git
Войти в полноэкранный режим Выход из полноэкранного режима

Через HTTP

$ git clone http://domain.com/user/repo.git
Войти в полноэкранный режим Выйти из полноэкранного режима
Создать новый локальный репозиторий в текущем каталоге:
$ git init
Войти в полноэкранный режим Выйти из полноэкранного режима
Создать новое локальное хранилище в определенном каталоге:
$ git init <directory>
Войти в полноэкранный режим Выйти из полноэкранного режима

Локальные изменения

Изменения в рабочем каталоге:
$ git status
Войти в полноэкранный режим Выход из полноэкранного режима
Изменения в отслеживаемых файлах:
$ git diff
Войти в полноэкранный режим Выход из полноэкранного режима
Просмотр изменений/различий конкретного файла:
$ git diff <file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Добавить все текущие изменения в следующий коммит:
$ git add .
Войти в полноэкранный режим Выйти из полноэкранного режима
Добавить некоторые изменения в <файле> к следующему коммиту:
$ git add -p <file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Добавить только упомянутые файлы к следующему коммиту:
$ git add <filename1> <filename2>
Войти в полноэкранный режим Выйти из полноэкранного режима
Зафиксировать все локальные изменения в отслеживаемых файлах:
$ git commit -a
Войти в полноэкранный режим Выйти из полноэкранного режима
Зафиксировать ранее поставленные изменения:
$ git commit
Войти в полноэкранный режим Выйти из полноэкранного режима
Зафиксировать с сообщением:
$ git commit -m 'message here'
Войти в полноэкранный режим Выйти из полноэкранного режима
Примите решение пропустить область постановки и добавить сообщение:
$ git commit -am 'message here'
Войти в полноэкранный режим Выйти из полноэкранного режима
Принять обязательство на какую-то предыдущую дату:
$ git commit --date="`date --date='n day ago'`" -am "<Commit Message Here>"
Войти в полноэкранный режим Выйти из полноэкранного режима
Изменить последний коммит:

Не изменяйте опубликованные коммиты!

$ git commit -a --amend
Войдите в полноэкранный режим Выйти из полноэкранного режима
Внести изменения в последний коммит, но использовать сообщение журнала предыдущего коммита

Не вносить изменения в опубликованные коммиты!

$ git commit --amend --no-edit
Войдите в полноэкранный режим Выйти из полноэкранного режима
Изменить дату коммиттера последнего коммита:
GIT_COMMITTER_DATE="date" git commit --amend
Войти в полноэкранный режим Выйти из полноэкранного режима
Изменить дату автора последнего коммита:
$ git commit --amend --date="date"
Войти в полноэкранный режим Выйти из полноэкранного режима
Переместить незафиксированные изменения из текущей ветки в другую ветку:
$ git stash
$ git checkout branch2
$ git stash pop
Войти в полноэкранный режим Выйти из полноэкранного режима
Восстановить сохраненные изменения обратно в текущую ветку:
$ git stash apply
Войти в полноэкранный режим Выход из полноэкранного режима

Восстановить определенный тайник обратно в текущую ветку:

  • {номер_заначки} можно получить из git stash list.
$ git stash apply stash@{stash_number}
Войти в полноэкранный режим Выйти из полноэкранного режима
Удалить последний набор сохраненных изменений:
$ git stash drop
Войти в полноэкранный режим Выйти из полноэкранного режима

Поиск

Текстовый поиск по всем файлам в каталоге:
$ git grep "Hello"
Войти в полноэкранный режим Выход из полноэкранного режима
Текстовый поиск в любом варианте:
$ git grep "Hello" v2.5
Войти в полноэкранный режим Выйти из полноэкранного режима
Показать коммиты, в которых было введено определенное ключевое слово
$ git log -S 'keyword'
Войти в полноэкранный режим Выйти из полноэкранного режима
Показать коммиты, в которых введено определенное ключевое слово (с помощью регулярного выражения)
$ git log -S 'keyword' --pickaxe-regex
Войти в полноэкранный режим Выйти из полноэкранного режима

История коммитов

Показать все коммиты, начиная с самого нового (будет показан хэш, информация об авторе, дата коммита и название коммита):
$ git log
Войти в полноэкранный режим Выйти из полноэкранного режима
Показать все коммиты (будет показан только хэш коммита и сообщение о коммите):
$ git log --oneline
Вход в полноэкранный режим Выход из полноэкранного режима
Показать все коммиты определенного пользователя:
$ git log --author="username"
Войти в полноэкранный режим Выйти из полноэкранного режима
Показать изменения во времени для определенного файла:
$ git log -p <file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Отображение коммитов, которые присутствуют только в удаленном/филиале в правой части
$ git log --oneline <origin/master>..<remote/master> --left-right
Войти в полноэкранный режим Выйти из полноэкранного режима
Кто, что и когда изменил в <файле>:
$ git blame <file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Показать журнал ссылок:
$ git reflog show
Войти в полноэкранный режим Выйти из полноэкранного режима
Удалить журнал ссылок:
$ git reflog delete
Войти в полноэкранный режим Выйти из полноэкранного режима

Переместить / Переименовать

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

Переименовать Index.txt в Index.html

$ git mv Index.txt Index.html
Войти в полноэкранный режим Выйти из полноэкранного режима

Филиалы и метки

Вывести список всех локальных ветвей:
$ git branch
Войти в полноэкранный режим Выйти из полноэкранного режима

Список локальных/удаленных филиалов

$ git branch -a
Войти в полноэкранный режим Выйти из полноэкранного режима
Перечислить все удаленные филиалы:
$ git branch -r
Войти в полноэкранный режим Выйти из полноэкранного режима
Переключить филиал HEAD:
$ git checkout <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Проверка одного файла из другой ветки
$ git checkout <branch> -- <filename>
Войти в полноэкранный режим Выйти из полноэкранного режима
Создание и переключение новой ветки:
$ git checkout -b <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Переход к предыдущей ветке, не произнося ее название в явном виде:
$ git checkout -
Войти в полноэкранный режим Выйти из полноэкранного режима
Создать новую ветвь из выходящей ветви и переключиться на новую ветвь:
$ git checkout -b <new_branch> <existing_branch>
Войти в полноэкранный режим Выйти из полноэкранного режима

Выход и создание новой ветки из существующего коммита

$ git checkout <commit-hash> -b <new_branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима
Создайте новую ветку на основе текущего HEAD:
$ git branch <new-branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Создать новую ветку отслеживания на основе удаленной ветки:
$ git branch --track <new-branch> <remote-branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Удалить локальный филиал:
$ git branch -d <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Переименование текущего филиала в новое имя филиала
$ git branch -m <new_branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима
Принудительное удаление локальной ветви:

Вы потеряете неизмененные изменения!

$ git branch -D <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Пометить HEAD тегом:
$ git tag <tag-name>
Войти в полноэкранный режим Выход из полноэкранного режима
Пометьте HEAD тегом и откройте редактор, чтобы включить сообщение:
$ git tag -a <tag-name>
Войти в полноэкранный режим Выйти из полноэкранного режима
Пометьте HEAD тегом, включающим сообщение:
$ git tag <tag-name> -am 'message here'
Войти в полноэкранный режим Выйти из полноэкранного режима
Перечислить все теги:
$ git tag
Войти в полноэкранный режим Выйти из полноэкранного режима
Список всех тегов с их сообщениями (сообщение тега или сообщение фиксации, если тег не имеет сообщения):
$ git tag -n
Войти в полноэкранный режим Выйти из полноэкранного режима

Обновить и опубликовать

Список всех текущих настроенных пультов:
$ git remote -v
Войти в полноэкранный режим Выход из полноэкранного режима
Показать информацию о пульте:
$ git remote show <remote>
Войти в полноэкранный режим Выйти из полноэкранного режима
Добавить новый удаленный репозиторий с именем <remote>:
$ git remote add <remote> <url>
Войти в полноэкранный режим Выйти из полноэкранного режима
Переименовать удаленное хранилище с <remote> на <new_remote>:
$ git remote rename <remote> <new_remote>
Войдите в полноэкранный режим Выйти из полноэкранного режима
Удалить удаленное хранилище:
$ git remote rm <remote>
Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание: git remote rm не удаляет удаленный репозиторий с сервера. Он просто удаляет удаленный и его ссылки из вашего локального репозитория.

Загрузите все изменения из <remote>, но не интегрируйте их в HEAD:
$ git fetch <remote>
Войдите в полноэкранный режим Выйти из полноэкранного режима
Загрузить изменения и напрямую объединить/интегрировать в HEAD:
$ git remote pull <remote> <url>
Войдите в полноэкранный режим Выйти из полноэкранного режима
Получить все изменения из HEAD в локальный репозиторий:
$ git pull origin master
Войти в полноэкранный режим Выйти из полноэкранного режима
Получить все изменения из HEAD в локальный репозиторий без слияния:
$ git pull --rebase <remote> <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Опубликовать локальные изменения в удаленном репозитории:
$ git push remote <remote> <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Удалить ветку на удаленном устройстве:
$ git push <remote> :<branch> (since Git v1.5.0)
Войти в полноэкранный режим Выйти из полноэкранного режима

ИЛИ

$ git push <remote> --delete <branch> (since Git v1.7.0)
Войти в полноэкранный режим Выйти из полноэкранного режима
Опубликуйте свои теги:
$ git push --tags
Войти в полноэкранный режим Выйти из полноэкранного режима

Глобальная настройка инструмента слияния для слияния (редактор)

$ git config --global merge.tool meld
Войти в полноэкранный режим Выйти из полноэкранного режима
Используйте настроенный инструмент слияния для разрешения конфликтов:
$ git mergetool
Войти в полноэкранный режим Выйти из полноэкранного режима

Merge & Rebase

Слияние ветви в текущий HEAD:
$ git merge <branch>
Войдите в полноэкранный режим Выйти из полноэкранного режима

Список объединенных ветвей

$ git branch --merged
Вход в полноэкранный режим Выйти из полноэкранного режима
Перебазируйте текущий HEAD на <ветку>:

Не перебазировать опубликованный коммит!

$ git rebase <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима
Прервать ребазинг:
$ git rebase --abort
Войти в полноэкранный режим Выйти из полноэкранного режима
Продолжить ребазинг после разрешения конфликтов:
$ git rebase --continue
Войти в полноэкранный режим Выйти из полноэкранного режима
Используйте ваш редактор для ручного разрешения конфликтов и (после разрешения) пометьте файл как разрешенный:
$ git add <resolved-file>
Войти в полноэкранный режим Выйти из полноэкранного режима
$ git rm <resolved-file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Сквоширование коммитов:
$ git rebase -i <commit-just-before-first>
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь замените это,

pick <commit_id>
pick <commit_id2>
pick <commit_id3>
Войти в полноэкранный режим Выйти из полноэкранного режима

на это,

pick <commit_id>
squash <commit_id2>
squash <commit_id3>
Войти в полноэкранный режим Выйти из полноэкранного режима

Отменить

Отменить все локальные изменения в рабочем каталоге:
$ git reset --hard HEAD
Войти в полноэкранный режим Выйти из полноэкранного режима
Уберите все файлы из области постановки (т.е. отмените последнее git add):
$ git reset HEAD
Войдите в полноэкранный режим Выйти из полноэкранного режима
Отбросить локальные изменения в определенном файле:
$ git checkout HEAD <file>
Войти в полноэкранный режим Выйти из полноэкранного режима
Отмена фиксации (путем создания новой фиксации с противоположными изменениями):
$ git revert <commit>
Войти в полноэкранный режим Выйти из полноэкранного режима
Сбросить указатель HEAD на предыдущий коммит и отменить все изменения с тех пор:
$ git reset --hard <commit>
Войти в полноэкранный режим Выйти из полноэкранного режима
Сброс указателя HEAD на текущее состояние удаленной ветки.
$ git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
Войти в полноэкранный режим Выйти из полноэкранного режима
Сбросить указатель HEAD на предыдущий коммит и сохранить все изменения как непоставленные изменения:
$ git reset <commit>
Войдите в полноэкранный режим Выйти из полноэкранного режима
Сброс указателя HEAD на предыдущий коммит и сохранение нефиксированных локальных изменений:
$ git reset --keep <commit>
Войдите в полноэкранный режим Выйти из полноэкранного режима
Удаление файлов, которые были случайно зафиксированы до того, как они были добавлены в .gitignore
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
Войдите в полноэкранный режим Выход из полноэкранного режима

Git-Flow

Индекс

  • Настройка
  • Начало работы
  • Функции
  • Создание релиза
  • Горячие исправления
  • Команды

Установка

В качестве предварительного условия вам потребуется рабочая установка git. Git flow работает на OSX, Linux и Windows.
OSX Homebrew:
$ brew install git-flow-avh
Вход в полноэкранный режим Выход из полноэкранного режима
OSX Macports:
$ port install git-flow
Войти в полноэкранный режим Выйти из полноэкранного режима
Linux (на базе Debian):
$ sudo apt-get install git-flow
Войти в полноэкранный режим Выйти из полноэкранного режима
Windows (Cygwin):
Вам нужны wget и util-linux для установки git-flow.
$ wget -q -O - --no-check-certificate https://raw.githubusercontent.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh install <state> | bash
Войти в полноэкранный режим Выход из полноэкранного режима

Начало работы

Git flow должен быть инициализирован для того, чтобы настроить ваш проект. Начните использование git-flow с инициализации внутри существующего git-репозитория:
Initialize:
Вам придется ответить на несколько вопросов относительно соглашений об именовании ваших ветвей. Рекомендуется использовать значения по умолчанию.
git flow init
Войти в полноэкранный режим Выйти из полноэкранного режима

ИЛИ

Использовать значения по умолчанию
git flow init -d
Войти в полноэкранный режим Выйти из полноэкранного режима

Функции

Разработка новых функций для предстоящих релизов. Обычно существуют только в репозиториях разработчиков.
Начать новую функцию:
Это действие создает новую ветку функций на основе ‘develop’ и переключается на нее.
git flow feature start MYFEATURE
Войти в полноэкранный режим Выход из полноэкранного режима
Завершить работу над функцией:
Завершить разработку функции. Это действие выполняет следующее:
1) Объединяет MYFEATURE в ‘develop’.
2) Удаляет ветку функции.
3) Переключается обратно на ветку ‘develop’.
git flow feature finish MYFEATURE
Вход в полноэкранный режим Выйти из полноэкранного режима
Опубликовать функцию:
Вы разрабатываете функцию в сотрудничестве? Опубликуйте функцию на удаленном сервере, чтобы ее могли использовать другие пользователи.
git flow feature publish MYFEATURE
Войти в полноэкранный режим Выход из полноэкранного режима
Получение опубликованной функции:
Получение функции, опубликованной другим пользователем.
git flow feature pull origin MYFEATURE
Вход в полноэкранный режим Выход из полноэкранного режима
Отслеживание функции на origin:
Вы можете отслеживать функцию на origin с помощью
git flow feature track MYFEATURE
Войти в полноэкранный режим Выйти из полноэкранного режима

Создать релиз

Поддержка подготовки нового производственного релиза. Позволяет исправлять мелкие ошибки и готовить метаданные для выпуска.
Запустить релиз:
Чтобы запустить релиз, используйте команду git flow release. Она создает ветку релиза, созданную из ветки ‘develop’. Опционально вы можете указать хэш sha-1 коммита [BASE] для запуска релиза. Коммит должен находиться в ветке ‘develop’.
git flow release start RELEASE [BASE]
Войти в полноэкранный режим Выход из полноэкранного режима
После создания ветки релиза целесообразно опубликовать ее, чтобы другие разработчики могли зафиксировать релиз. Делается это аналогично публикации ветки с помощью команды:
git flow release publish RELEASE
Войти в полноэкранный режим Выход из полноэкранного режима
(Вы можете отслеживать удаленный релиз с помощью:

git flow release track RELEASE

команда)

Завершение работы над релизом:
Завершение релиза — это один из важных этапов ветвления в git. Оно выполняет несколько действий:
1) Слияние ветви релиза обратно в ‘master’
2) Помечает релиз его именем
3) Обратное слияние релиза в ‘develop’
4) Удаляет ветвь релиза
git flow release finish RELEASE
Вход в полноэкранный режим Выход из полноэкранного режима
Не забывайте проталкивать свои теги с помощью

git push --tags.


Хотфиксы

Хотфиксы возникают из-за необходимости немедленно принять меры в случае нежелательного состояния рабочей версии. Могут быть ответвлены от соответствующего тега на ветке master, которая обозначает производственную версию.
Запуск хотфикса Git flow:
Как и другие команды git flow, хотфикс запускается с помощью команды
$ git flow hotfix start VERSION [BASENAME]
Войти в полноэкранный режим Выйти из полноэкранного режима
Аргумент version обозначает имя релиза нового хотфикса. Опционально вы можете указать базовое имя для запуска.
Завершить хотфикс:
При завершении хотфикса он снова объединяется в develop и master. Дополнительно слияние с мастером помечается версией хотфикса.
git flow hotfix finish VERSION
Войти в полноэкранный режим Выйти из полноэкранного режима

Команды

Схема потока Git

Оцените статью
devanswers.ru
Добавить комментарий