VCS (Version Control System) - система контроля версий, регистрирующая изменения в одной или нескольких файлах с тем, чтобы в дальнейшем была возможность вернуться к определенным старым версиям этих файлов. [1.1]
CVCS (Central Version Control System) - централизованная система контроля версий, которая подразумевает, что существует сервер, на котором хранятся все файлы под контролем VCS, и ряд клиентов получают копии файлов из него. [1.2]
DVCS (Distributed Version Control System) - распределенная система контроля версий подразумевает, что у клиентов находится полная копия репозитория с сервера, что позволяет легко восстановить рабочий прототип, если с ним что-то случится. [1.3]
Принцип хранения - многие VCS хранят свои данные в виде списка изменений, Git же хранит полные копии файлов, только заменяя неизмененные файлы на ссылки. [2.1]
Локальные операции - для совершения большинства операций в Git'е необходимы только локальные файлы и ресурсы, т.е. обычно информация с других компьютеров в сети не нужна. [2.2]
Состояние файла - в Git'е файлы могут находиться в следующих состояниях: fixed, changed, stagedm untracked, ignored. [2.3]
git add
), то он переходит в staged.git commit
), то он переходит в fixed.Repository - это место, где Git хранит метаданные и базу данных объектов вашего проекта.
Working Directory - это извлечённая из базы копия определённой версии проекта.
Staging Area - это обычный файл, хранящийся в репозитории Git'а, который содержит информацию о том, что должно войти в следующий коммит.
Blob (Binary Large Object) - каждая версия файла представлена блобом.
Tree - объект, который представляет директорию.
Commit - содержит текущее состояние репозитория.
Branch - используется для создания новой ветки разработки.
master
.Tag - обозначает значимое имя с указанной версией в репозитории.
Clone - эта операция создает локальный инстанс репозитория.
Pull - операция копирования изменений из удаленного репозитория в локальный.
Push - операция копирования изменений из локального репозтироия в удаленный.
HEAD - указатель, который обычно указывает на последний комит в ветке.
Revision - представляет собой версию исходников
URL - место, где находится репозиторий.
git config
).git config
- считывание или запись глобальных или локальных конфигураций. [4.1]
git config --global user.name "[name]"
- указывает символическое имя, которое будет привязываться к каждому комиту. git config --global user.name "CustomName"
- добавление имени CustomName в конфиг.git config --global user.email "[email address]"
- указывает почту, которая будет привязываться к каждому комиту. git config --global user.name "CustomName@email.com"
- добавление почты CustomName@email.com в конфиг.git config --global alias.[name] [alias]|"[composit alias]"
- добавляет глобальный алиас (сокращение). git config --global alias.cf config
- добавление алиаса, который делает сокращение git cf
для команды git config
добавления конфигурации.git config --global alias.cfg "config --global"
- добавление составного алиаса, который делает сокращение git cfg
для команды git config --global
добавления глобальной конфигурации.git config --list
- перечисляет все ключи конфигураций и их значения.git config --unset --global [config]
- удаляет указанный ключ из конфигураций.git config --unset alias.cf
- удаление алиаса git cf
.git init
- создание пустого репозитория или переинициализация существующего. [4.2]
git init
- создает репозиторий в текущей папке.git init [directory]
- создает директорию "directory" с репозиторием.git clone
- операция клонирования репозитория. [4.3]
git clone [repository]
- клонирование репозитория, который находится по пути "repository".git clone git@github.com:[username]/[repository].git
- клонирование репозитория по ssh ключу.git clone https://github.com/[username]/[repository].git
- клонирование репозитория через https протокол.git clone [repository] [directory]
- клонирование репозитория, который находится по пути "repository", в указанную директорию "directory".git clone https://github.com/[username]/[repository].git /home/name/projects/project
- клонирование репозитория в директорию /home/name/projects/project/.git clone -b [branch] [repository]
- клонирование определенной ветки репозитория.git clone -b master git@github.com:[username]/[repository].git
- клонирование ветки master.git clone -l [repository]
- клонирование локального репозитория.git clone -l /home/name/projects/project/ /home/name/projects/project2/
- клонирование локального репозитория из директории project в директорию project2.git add
- операция индексирования файла. [4.4]
git add [modified]
- индексирование одного файла "modified", или дирректории "modified", или всех объектов, удовлетворяющих паттерну "modified".git add .
- добавляет все файлы в текущей директории и ее поддиректориях.git add .gitignore
- добавляет в индекс файл .gitignore.git add project/
- добавляет в индекс файлы из директории project/.git add Documentation/\*.txt
- добавляет в индекс все .txt файлы в директории Documentation/.git add -A
- добавление в индекс всех modified файлов в проекте.git status
- операция вывода статуса текущего working tree. [4.5]
git status [file]
- выводит статус по текущему файлу.git status
- показывает статус всех modified и staged файлов.git status .gitignore
- показывает статус файла .gitignore.git status project/
- показывает статус папки project/.git status Documentation/\*.txt
- показывает статус всех .txt файлов в директории Documentation/.git status --ignored
- выводит статус также и ignored файлов.git diff
- показывает изменения между элементами. [4.6]
git diff [file]
- выводит изменения в текущем файле.git diff
- показывает статус всех modified файлов.git diff .gitignore
- показывает статус файла .gitignore.git diff project/
- показывает статус папки project/.git diff Documentation/\*.txt
- показывает статус всех .txt файлов в директории Documentation/.git diff [object]
- выводит изменения в текущем объекте.git diff master
- показывает изменения между текущей веткой и веткой master.git diff HEAD HEAD^
- показывает изменения между предыдущим комитом и комитом после него.git diff --name-status
- выводит только имена файлов, которые являются modified.git commit
- записывает изменения в репозиторий. [4.7]
git commit [file]
- добавляет staged изменения в текущем файле в репозиторий.git commit
- добавляет в репозиторий (делает fixed) все staged объекты.git commit .gitignore
- добавляет в репозиторий файл .gitignore.git commit project/
- добавляет в репозиторий папкe project/.git commit Documentation/\*.txt
- добавляет в репозиторий все .txt файлы в директории Documentation/.git commit -m '[message]'
- сообщение для комита можно ввести в ковычках вместо того, чтобы открывать редактор.git commit -m 'Init commit'
- делает комит 'Init commit'.git commit -a
- автоматически индексирует измененные файлы, которые ранее были добавлены в репозиторий и делает комит.git commit --amend
- добавляет все staged файлы в предыдущий комит, тем самым перезаписывая его хэш.git reset
- передвигает HEAD в указанное состояние. [4.8]
git reset -- [file]
- отменяет добавление файлов в staged area.git reset
- отменяет изменения, добавленые в staged area с помощью git add
, и делает их обратно modified.git reset .gitignore
- добавляет в репозиторий файл .gitignore.git reset project/
- добавляет в репозиторий папкe project/.git reset Documentation/\*.txt
- добавляет в репозиторий все .txt файлы в директории Documentation/.git reset [object]
- передвигает HEAD на указанный объектgit reset HEAD^
- переводит последние закомиченные fixed изменения в состояние modified.git reset ORIG_HEAD
- чтобы обратиться к HEAD, который был до reset, можно написать ORIG_HEAD.git reset 99F99F
- переводит все изменения в комитах после комита с текушим хэшом "99F99F" в состояние modified.git reset HEAD@{5}
- переводит голову в состояние, в котором она была 5 "передвижений" назад (чтобы узнать где она была 5 шагов назад, стоит посмотреть git reflog
).git reset --soft
- не затрагивает проиндексированные файлы или рабочую директорию.git reset --soft HEAD^
- переводит последние закомиченные изменения в состояние staged и оставляет рабочую директорию такой, какая она была до reset.git reset --hard
- удаляет комит и изменения из рабочей директории.git reset --hard HEAD^
- удаляет из дерева последний комит вместе со всеми изменениями.git reset --hard [remote]/[branch]
- полностью перезаписывает текущую локальную историю и изменения в рабочей директории на те, что находятся в указанной удаленный ветке.git reset --hard origin/master
- делает текущую ветку идентичной удаленной ветке "master".git reset --merge
- не затрагивает проиндексированные файлы или workng tree.git reset --merge ORIG_HEAD
- отменяет последнее слияние веток.git rm
- удаляет файлы из рабочей директории и фиксирует изменения. [4.9]
git rm [file]
- удаляет указанный файл и фиксирует изменения.git rm --cached
- переводит файл из состояния committed в состояние untracked.git mv
- перемещает или переименовывает файлы, директории, символически ссылки. [4.10]
git mv [file] [file]
- изменяет имя указанного файла и фиксирует изменения.git branch
- выводит, создает или удаляет ветки. [4.11]
git branch
- выводит все локальные ветки в данном репозитории.git branch [branch]
- создает новую ветку с указанным именем "branch".git branch -d [branch]
- удаляет ветку с указанным именем "branch".git branch --set-upstream-to=[remote]/[branch-remote] [branch-local]
- устанавливает связь текущей ветки
"branch-local" с веткой "branch-remote" в удаленном репозитории "remote".git checkout
- переключается между элементами или откатывает изменения в файлах в рабочей директории. [4.12]
git checkout -- [file]
- откатывает изменения в файле.git checkout [object]
- переходит на указанный объект.git checkout --track [remote] [branch]
- создает новую локальную ветку "branch", идентичную удаленной ветке.git merge
- соединяет две или более истории в одну. [4.13]
git merge [object]
- сливает историю согласно указанному объекту.git merge -s [strategy]
- сливает истории, используя указанную стратегию.git merge --no-commit
- сливает истории, не создавая нового комита.git log
- показывает лог комитов. [4.14]
git log [object]
- показывает историю согласно указанному объекту.git log [file]
- показывает комиты, в которых фигурировал данный файл.git log -[N]
- ограничивает число выведенных коммитов на N.git stash
- прячет, достает, очищает изменения в рабочей директории. [4.15]
git stash
- прячет все текущие staged файлы в стэш.git stash pop
- достает все файлы из стэша в staged area.git stash list
- показывает все файлы в стэше.git stash clear
- очищает стэш, удаляя все файлы в нем.git tag
- создает, показывает, удаляет или проверяет теги. [4.16]
git tag
- выводит все созданные теги.git tag - l [pattern]
- выводит все созданные теги, удовлетворяющие указанному паттерну.git tag [name]
- создает тег для текущего положения HEAD с именем "name".git tag -d [name]
- удаляет тег с именем "name".git tag -a [version]
- создает аннотированный тег, который является полноценным объектом.git fetch
- загружает историю из указанного репозитория. [4.17]
git fetch [remote]
- обновляет все ветки, связанные с данным удаленным репозиторием.git fetch --all
- обновляет все ветки, которые имеют привязки к удаленным репозиториям.git pull
- загружает историю из указанного репозитория и сливает ее с локальной историей. [4.18]
git pull [remote] [branch]
- загружает историю ветки из указанного удаленного репозитория.git pull -r
- применяет rebase алгоритм вместо merge при слиянии истории.git push
- загружает историю в удаленный репозиторий. [4.19]
git push [remote] [branch]
- загружает историю локальной ветки в указанный удаленный репозиторий.git push [remote] :[branch]
- удаляет указанную ветку из удаленного репозитория.git remote
- управляет набором отслеживаемых репозиториев. [4.20]
git remote
- показывает имена подключенных репозиториев.git remote -v
- показывает имена и пути подключенных репозиториев.git remote add [name] [path]
- доgit show
- выводит информацию о различных объектах. [4.21]
git show [object]
- выводит информацию об указанном объекте.git cherry-pick
- переносит изменения, представленные в указанных комитах. [4.22]
git cherry-pick [commit]
- применяет указанный комит к текущей ветке.git rebase
- переносит локальные комиты в указанное положение в дереве. [4.23]
git rebase [object]
- применяет комиты из указанного объекта на текущую ветку.git rebase -i
- открывает редактор с выделенными комитами, где можно указать параметры ребейза
определенного коммита.git rebase [object] --onto [newbase]
- применяет выделенные коммиты в "newbase".git revert
- отменяет существующие комиты. [4.24]
git revert [commit]
- отменяет изменения, на которые указывает данный объект.git revert --no-commit
- отменяет изменения без создания нового комита.git grep
- выводит строки, удовлетворяющие паттерну. [4.25]
git grep [pattern] -- [file-pattern]
- возвращает все выражения удовлетворяющие "pattern" во всех файлах,
удовлетворяющих "file-pattern".git grep -e
- означает, что следущий параметр является паттерном.git clean
- удаляет неиндексированные файлы из рабочей директории. [4.26]
git clean [file]
- удаляет untracked указанный файл.git clean -d
- удаляет также и директории.git clean -f
- если в конфигурациях поле clean.requireForce не true, то без этого параметра git откажется
удалять файлы.git clean -x
- игнорирует .gitignore файл, тем самым можно удалять ignored файлы.git reflog
- управляет reflog информацией. [4.27]
git reflog [ref]
- выводит reflog указанного ref.