Содержание
Исправление и откат сделанных передач
Работа с удаленными репозиториями
Отправка патчей по электронной почте
Пошаговый поиск проблемных передач
Глоссарий
commit
фиксация правок в файле
to commit
зафиксировать правки в файле
commit message
комментарий к правке
staged area
область выставления, тж. индекс
unstaged area
невыставленная область; рабочая область
to stage
выставить файл; переместить файл в индекс
to unstage
отменить выставление; вернуть файл в рабочую область; удалить файл из индекса
tracked file
отслеживаемый файл; включенный файл (в репозиторий)
untracked file
неотслеживаемый файл; невключенный файл
to track
включить файл (в репозиторий) для отслеживания изменений в нём
Терминология
- тематическая ветвь (topic branch)
-
Ветвь, выделенная под набор правок, посвященных отдельной теме
Элементы
прямое следование (fast-forward)
Один из способов слияния, предполагающий, что первая правка объекта-обновления, является прямым потомком обновляемого объекта.
Допустим, есть обновляемый объект „A“:
x-x-x-A
Есть также объект-обновление „B“:
C-x-B
При операции merge
, способ fast-forward предполагает, что первое изменение в
объекте „B“ — „C“, является прямым потомком „A“:
x-x-x-A-C-x-B
Напротив, в данном случае:
x-x-x-D-x-x-x-A
\
C-x-B
Объект „A“ невозможно обновить данным способом, так как первое изменение в „B“ — „C“, не было его прямым потомком. Оно является прямым потомком объекта „D“, который и был обновлен данным способом.
Нужно иметь ввиду, что при выполнении операции push
будет происходит
обязательное слияние. Если слияние данным способом окажется невозможным, то в
соответствии со стратегией работы системы Git операция push
должна быть
отменена удаленной стороной.
ссылка (reference, ref)
указатель на последнюю версию цепочки правок
Конфигурация
Команды конфигурации
git config --system
option
value
изменить системный параметр
Изменения будут сохранены в файле „/etc/gitconfig
“.
git config --global
option
value
изменить глобальный параметр
Изменения будут сохранены в файле „~/.gitconfig
“.
git config
option
value
изменить локальный параметр
Изменения будут сохранены в файле „.git/config
“.
Опции
alias.
old_command
new_command
добавить замену для стандартной команды
При замене глобальной команды следует поставить „!“ перед заменяемой командой:
git config --global alias.visual'!gitk'
core.editor
editor
добавить текстовый редактор
core.pager
pager
установить пэйджер. Можно отключить использование пэйджера, передав пустую строку (''
) в качестве значения
core.quotepath false
запретить вывод имен файлов в формате Unicode в виде числовых кодов при выполнении git status
merge.tool
merge_tool
добавить инструмент сравнения файлов
commit.template
template
установить шаблон для записи передачи
core.excludesfile
path
установить внешний файл с исключениями
help.autocorrect 1
установить автоматическое исправление опечаток
color.ui
{true | false | always}
настроить цветной вывод. При установке опции always, цветной вывод будет присутствовать даже при перенаправлении данных в файл или другой команде
Ссылки
Ссылки устанавливают соответствия между объектами в локальном и удаленном репозитариях.
Создание нового репозитория
git init
ининциализировать репозиторий
git status
вывести текущий статус
git checkout --
filename
откатить сделанные в файле правки
Атрибуты
Атрибуты задаются в файлах ./.gitattributes
или ./.git/info/attributes
.
Формат задания атрибутов в указанных выше файлах следующий: path attribute
.
path
export-ignore
не добавлять указанные файлы и каталоги в архив при экспорте с помощью git
archive
Закрепленные сценарии
Клиентские закрепленные сценарии
Сценарии, связанные с фиксацией правок
Сценарии, связанные с добавление патчей
Серверные закрепленные сценарии
Файлы с закрепленными сценариями содержатся в каталоге .git/hooks
.
Клиентские закрепленные сценарии
пусто
Сценарии, связанные с фиксацией правок
pre-commit
Запускается сразу же после команды git commit
и перед запуском текстового
редактора. Если данный сценарий возвращает „0“ (exit 0
), то после него будет
запущен текстовый редактор, если „1“ (exit 1
), то фиксация правки будет
отменена.
prepare-commit-msg
Запускается перед запуском текстового редактора, но сразу же после создания текстового сообщения по умолчанию. Позволяет изменять текстовое сообщение по умолчанию. Имеет три аргумента:
$*[0]
— файл с текстовым сообщением по умолчанию;
$*[1]
— тип правки {commit | template | squash}
;
$*[2]
— хэш правки.
commit-msg
Выполняется после закрытия текстового редактора и перед фиксацией правки. Может быть использован для проверки журнальной записи на соответствие некоторым критериям. Имеет один аргумент:
$*[0]
— файл с текстовым сообщением.
post-commit
Запускается после успешной фиксации правки.
Сценарии, связанные с добавление патчей
applypatch-msg
Запускается перед добавлением патча командой git am
. Если сценарий возвратит
„1“ (exit 1
), то патч добавлен не будет, если „0“ (exit 0
), то патч будет
добавлен. Имеет один аргумент:
$*[0]
— временный файл, содержащий журнальную запись.
pre-applypatch
Запускается перед добавлением патча командой git am
. Позволяет проверить
некоторые изменения в файлах проекта. Если сценарий возвратит „1“ (exit 1
), то
изменения в файлах будут выставлены, если „0“ (exit 0), то патч будет добавлен.
Не имеет аргументов.
post-applypatch
Запускается по завершению добавления патча командой git am
. Не позволяет
проводить какие-либо проверки и отменять обновление проекта. Не имеет
аргументов.
Сценарии, связанные с перебазированием, слиянием и выпиской
pre-rebase
Запускается перед перебазированием. Позволяет проверить некоторые условия перед
этой операцией. Если сценарий возвратит „1“ (exit 1
), то перебазирование не
будет осуществлено, если „0“ (exit 0
), то будет. Может иметь два, либо один
аргумент:
$*[0]
— базовая ветвь;
$*[1]
— целевая ветвь (nil, в случае, если перебазируется текущая ветвь).
post-merge
Запускается после успешного слияния. Имеет один аргумент:
$*[0]
— флаг, указывающий на тип слияния (0 — обычное, 1 слияние через
сжатие).
post-checkout
Запускается после выписки. Имеет три аргумента:
$*[0]
— полный хэш последней правки в текущей ветви;
$*[1]
— полный хэш последней правки в выписанной ветви;
$*[2]
— флаг, указывающий на тип выписки (0 — выписка файла, 1 — выписка
ветви).
Серверные закрепленные сценарии
Серверные закрепленные сценарии содержатся в каталоге hooks/
в удаленном репозитории.
pre-receive
Запускается после получения обновлений от клиента, перед добавлением этих
обновлений в репозиторий. Будет выполнен один раз, вне зависимости от того,
сколько ветвей предполагается обновить. Позволяет отклонять обновления
удаленного репозитория. Если сценарий возвращает „1“ (exit 1
), то обновления
не произойдет, если „0“ (exit 0
), то обновление пройдет успешно. Не имеет
аргументов.
update
Запускается после получения обновлений от клиента, перед добавлением этих
обновлений в репозиторий. Будет выполнен столько раз, сколько ветвей
предполагается обновить. Позволяет отклонять обновление определенных ветвей.
Если сценарий возвращает „1“ (exit 1
), то обновления не произойдет, если „0“
(exit 0
), то обновление пройдет успешно. Имеет три аргумента:
$*[0]
— полное имя ветви, предполагаемой для обновления;
$*[1]
— хэш текущей правки для данной ветви;
$*[2]
— хэш последней правки для данной ветви.
post-receive
Запускается после добавления обновлений, полученных от клиента. Будет выполнен один раз, вне зависимости от того сколько ветвей было обновлено. Не имеет аргументов.
Выставление
git add
file
выставить файл для фиксации правок
git add -i
выставить желаемые файлы посредством их выбора в интерактивном режиме
Запустится интерактивная утилита. Потребуется выбрать файлы.
git add -p
выставить файлы путем последовательного выбора или отката желаемых правок в интерактивном режиме
Запуститися интерактивная утилита. Потребуется выбрать правки.
git add -e
выставить файлы путем выбора или отката желаемых правок в текстовом редакторе
Запустится текстовый редактор. Потребуется удалить ненужные правки путем непосредственного исключения их из текста загруженного документа.
git reset HEAD
file
снять выставленный файл
Файл должен находиться в индексе.
git checkout --
file
отменить правки в указанном файле
Файл должен находиться в рабочей области.
git rm
file
выставить файл для удаления
Файл должен быть включен в репозиторий. В противном случае, следует использовать
средства операционной системы для удаления файла (e. g. rm file
).
git rm --cached
file
отменить добавление нового неотслеживаемого файла в индекс и вернуть его в рабочую область
git mv
old_name
new_name
выставить файл для переименования
Откладывание правок
git stash
отложить сделанные правки
git stash list
вывести список отложенных правок
git stash show stash@{
n
}
вывести краткие сведения об указанной отложенной правке
git stash show -p stash@{
n
}
вывести подробные сведения об указанной отложенной правке
git stash apply stash@{
n
}
добавить n-ую отложенную правку
git drop stash@{
n
}
удалить n-ую отложенную правку
git stash branch
name
stash@{
n
}
создать ветвь из отложенной правки и удалить последнее
Фиксация правок
git commit
зафиксировать изменения для всех выставленных файлов
git commit -m
message
зафиксировать изменения одновременно с добавлением журнальной записи
git commit
file
зафиксировать изменения только для указанного файла, вне зависимости от того, является он выставленным или нет
git commit -a
зафиксировать изменения для всех файлов, как выставленных так и не выставленных
Исправление и откат сделанных передач
git commit --amend -m
message
изменить журнальную запись последней правки, а так же добавить файлы из индекса в уже зафиксированную правку, если таковые имеются
git commit --amend -C HEAD
добавить файлы из индекса в уже зафиксированную правку
git commit --amend -a -C HEAD
добавить файлы из рабочей области в уже зафиксированную правку
git revert <хэш> - осуществить передачу, отменяющую изменения в указанной передачи. Если необходимо осуществить отменяющую передачу не для последней передачи, то нужно последовательно выполнить данный тип передачи несколько раз, начиная с последней передачи.
git revert -n <хэш> - выставить отмененные изменения. При пакетной отмене, можно использовать идиому: git revert -n HEAD; git revert -n HEAD^; git revert -n HEAD^^ и т. д.
git revert --no-edit <хэш> - не запускать редактор при выполнении отменяющей передачи. В этом случае в качестве журнального сообщения будет присутствовать стандартная запись.
git reset <хэш> - переместится в истории изменений до указанной передачи, удалив все последующие, не выставляя все осуществленные изменения.
git reset --soft <хэш> - переместиться в истории изменений до указанной передачи, удалив все последующие, выставив все осуществленные изменения.
git reset --hard <хэш> - переместиться в истории изменений до указанной передачи, удалив все последующие.
git filter-branch --tree-filter 'rm -f <файл>' <ветвь> - удалить указанный файл во всех передачах ветви. Будет создана резервная копия. Удалить её можно следующей командой.
git update-ref -d <ветвь> <хэш>
Если затем попытаться повторно удалить некий файл уже из другой ветви, то команда возвратит ошибку, сообщающую о невозможности перезаписать резервную копию. Для того, чтобы форсировать перезапись нужно добавить опцию -f к команде.
git filter-branch -f --tree-filter 'rm -f <файл>' <ветвь>
git filtrer-branch --tree-filter 'rm -f <файл>' -- --all - удалить указанный файл во всех передачах всех ветвей.
Журналирование
git log
вывести список всех сделанных правок
git log --format=
format_string
задать пользовательский формат вывода
Cписок символов форматирования:
%h
- укороченный хэш, идентифицирующий правку;
%s
- загловок журнальной записи;
%b
- содержимое журнальной записи;
%n
- новая строка.
git log -
number
ограничить перечень выводимых правок заданным числом
git log
hash
не отображать правки после заданной указанным хэшем
git log
old_hash
..
[ new_hash ]
вывести список правок в заданном интервале
Правка, соответствующая нижней границе не будет включена в вывод. Верхняя граница может быть опущена. В этом случае, таковой будет считаться последняя сделанная правка.
git log --oneline --left-right --boundary
left_branch
...
right_branch
вывести список правок для двух ветвей с общей правкой
В выводе под каждую правку будет выделена одна строка (--oneline
). Вывод будет
содержать правки обоих ветвей, а так же общую правку-родителя (--boundary
).
Информация будет выведена в один столбик. Каждую запись будет предварять либо
стрелка влево, либо стрелка вправо, в зависимости от того куда была внесена
правка, в левую или в правую ветвь (--left-right
). Общая правка будет помечена
знаком дефис (-
).
git log
{
--since=
|
--until=
}datetime
вывести список правок с/до указанной даты-времени
Формат даты-времени может быть разным. Например:
12012019
— 12 декабря 2019 года;
1201
— 12 декабря текущего года;
12.01.2019 13:00:04
— 12 декабря 2019 года 13:00:04.
git log -p
вывести список правок вместе со сделанным изменениями
git log --all --graph
отобразить историю правок во всех ветвях в виде графов
git log --
file
отобразить историю правок только для указанного файла
git log
branch
[
--not
base_branch
|
^
base_branch
]
отобразить историю правок для указанной ветви
Посредство опции --not
имеется возможность исключить из вывода правки,
сделанные в ветви на которой основана указанная ветвь.
git log --decorate=
format
задать формат отображения ссылок
Перечень возможных значений:
short
— укороченный формат: „master
“, „origin/master
“;
full
— полный формат: „refs/heads/master
“, „refs/remotes/origin/master
“;
auto
— при выводе на терминал short
, иначе — full
;
no
— не отображать.
git log --grep=
'regexp'
отфильтровать вывод на основе сопоставления заданного регулярного выражения с комментариями к правке
git rev-parse
reference
вывести полный хэш для указанного объекта
В качестве объектов могут выступать правки или аннотированные метки. Хэш аннотированной метки это отдельный хэш, не зависимый от хэша промаркированной правки.
git show
reference
вывести подробную информацию об объекте по ссылке
В качестве объектов могут выступать правки или аннотированные метки.
Просмотр изменений
git diff
просмотреть изменения во всех файлах относительно индекса
git diff --staged
просмотреть изменения между выставленными файлами и файлами в репозитории
git diff --text
рассматривать двоичные файлы как текстовые (по умолчанию, git игнорирует двоичные файлы и не выводит изменения в них)
git diff --stat
вывести сводный отчет по сделанным изменениям
git diff --check
проверить файл на наличие завершающих пробелов
git diff -U
number
установить количество отображаемых строк до и после изменённой строки
git diff
hash
просмотреть изменения во всех файлах относительно указанной правки
git diff
hash
file
просмотреть изменения в конкретном файле относительно указанной правки
git diff
tag..tag
просмотреть изменения в указанном интервале правок
git diff
base_branch..target_branch
просмотреть изменения между целевой ветвью и общим предком базовой и целевой ветвей
git difftool
просмотреть изменения в специализированной программе
git difftool -y
не выводить подтверждающий запрос при запуске программы просмотра изменений
git blame
file
просмотреть изменения в файле с включением в вывод хэша, автора, даты и прочей информации
git blame -L
starting_line
,
{ ending_line |
-
offset
|
+
offset
}
file
отобразить только указанные строки в просматриваемом файле
Интервал задается указанием номера начальной строки и (опционально) номером конечной строки или количеством строк до или после начальной.
git blame
hash{
^
[offset] |
~
[offset] }
--
file
просмотреть изменения в файле до указанной правки и не включать все последующие
Правка идентифицируется хэшем или отклонением от правки с указанным хэшем (^
—
„первый прямой предок указанной“ (если прямых предков несколько), ^n
— „n-й
прямой предок указанной“, ~n
— „указанная, минус n“).
git blame
hash
..
hash
--
file
просмотреть изменения в указанном интервале правок
Ветвление
git branch - показать все текущие ветви и отметить рабочую.
git branch -v - показать все ветви, отметить текущую и вывести последнюю передачу для каждой ветви.
git branch -r - показать все ветви в удаленном репозитории.
git branch <имя_ветви> <имя_родительской_ветви> - создать ветвь.
git branch <имя_новой_ветви> <имя_метки> - восстановить ветвь с указанной метки.
git branch -d <имя_ветви> - удалить ветвь. Ветвь должна быть слита.
git branch -rd <имя_ветви> - удалить удаленную ветвь.
git branch -D <имя_ветви> - удалить ветвь вне зависимости от того, слита она или нет.
git branch -m <прежнее_имя> <новое_имя> - переименовать ветвь.
git checkout <имя_ветви> - выписать указанную ветвь.
git checkout -b <имя_новой_ветви> <имя_родительской_ветви> - создать новую ветвь и сразу же переключиться на неё.
Слияние
git merge <имя_ветви>
-
Осуществить прямое слияние текущей ветви с указанной
git merge --no-commit <имя_ветви>
-
Выствить правки на слияние
git merge --squash <имя_ветви>
-
Выставить объединенные правки указанной ветви для текущей
git cherry-pick <укороченный_дайджест>
-
Зафиксировать правку, помеченную дайджестом, для текущей ветви
git cherry-pick -n|--no-commit <укороченный_дайджест>
-
Выставить правку, помеченную дайджестом, для текущей ветви
git mergetool <программа_сравнения>
-
Использовать программу сравнения для разрешения конфликтов слияния
git merge-base <ветвь_1> <ветвь_2>
-
Найти общего предка между двумя ветвями
git checkout --ours|--theirs <файл>
git add <файл>
-
Выписать заданную версию файла (локальную —
ours
, либо удаленную —theirs
) при возникновении конфликтов во время слияния -
Выставить выбранную версию файла
git - How to select the entire REMOTE file during mergetool? - Stack Overflow
Перебазирование
git rebase <базовая_ветвь> <целевая_ветвь> - перебазировать целевую ветвь в конец базовой.
git rebase <ветвь> - перебазировать текущую ветвь в конец указанной.
git rebase --onto <базовая_ветвь> <ветвь_посредник> <целевая_ветвь> - перебазировать целевую ветвь в конец базовой, исключая предка в ветви посреднике.
git reabase --onto <базовая_ветвь> <ветвь_посредник> - перебазировать текущую ветвь в конец базовой, исключая предка в ветви посреднике.
git rebase -i <хэш> - войти в интерактивный режим для изменения порядка передач.
Метки
git tag <метка> <имя_ветви>
-
Создать легковесную метку для указанной ветви
git tag <метка> <дайджест>
-
Создать метку для одной из предыдущих правок
git tag -a|--annotate <метка> -m|--message <описание>
-
Создать аннотированную метку для текущей ветви
git tag
git tag -l|--list
-
Возвратить список меток
git tag -l|--list -n<номер>
-
Вывести список меток и указанное количество строк аннотации для аннотированных меток
git tag -d|--delete <метка>
-
Удалить указанную метку
Работа с удаленными репозиториями
git clone <URL> - клонировать репозиторий в локальный каталог.
git remote add <имя> <URL> - добавить удаленный репозиторий.
git remote -v - просмотр всех удаленных репозиториев и их URL.
git remote rm <имя> - удалить указанный удаленный репозиторий.
git fetch {<url> | <локальное_имя>} - скачать объекты из указанного удаленного репозитория и не сливать их с имеющимися в локальном репозитории.
git pull {<url> | <локальное_имя>} - скачать объекты из указанного удаленного репозитория и слить их с имеющимися в локальном репозитории.
git push [<имя_удаленного_репозитория>] - обновить удаленный репозиторий.
git push --dry-run - имитировать обновление репозитория.
git push <репозиторий> <ветвь> - обновить удаленный репозиторий, добавив в него только указанную ветвь.
git push <репозиторий> <ветвь>:<имя_в_удаленном_репозитории> - обновить удаленный репозиторий, добавив в него указанную ветвь, но сохранив её под другим именем.
git push <удаленный_репозиторий> :<удаляемая_ветвь> - удалить указанную ветвь из удаленного репозитория.
git push -f - осуществить настойчивое обновление.
git push --tags - добавить в репозиторий все имеющиеся метки.
git request-pull <начальная_ссылка> <url_репозитория> [<конечная_ссылка>] - вывысти на экран сводную статистику по передачам, ожидающим вытягивания со стороны менеджера.
Субмодули
git submodule - просмотреть субмодули.
git submodule add <репозиторий> <имя> - создать директорую с указанным именем и добавить в неё указанный репозиторий.
git submodule init <имя> - инициализировать (добавить запись о субмодуле в .git/config) указанный субмодуль.
git submodule update <имя> - обновить субмодуль.
Архивирование
git archive --format=<tar | zip> --prefix=<имя>/ <ветвь> - поместить все файлы проекта в директорию с указанным именем и создать архив указанного формата.
git archive --format=tar --prefix=<имя>/ <ветвь> | gzip > <имя>.tar.gz - поместить все файлы в директорию с указанным именем, создать архив формата tar и сжать этот архив, сохраняя в файле .tar.gz.
git archive --prefix=<имя>/ <ветвь> | gzip > `git describe --tags master`.tar.gz - поместить все файлы в директорию с указанным именем, создать архив формата по умолчанию (tar) и сжать этот архив, сохраняя в файле с именем являющимся выводом команды git-describe, добавляя расширение .tar.gz.
git describe --tags <ветвь> - показать самую последнюю созданную метку, учитывая неаннотированные метки. Вывод команды имеет следующий формат: <имя_тэга>-<количество_сделанных_передач>-g<хэш_последней_передачи>. "g" в выводе означает, что используется VCS git.
Патчи
git format-patch [<начальная_передача> | <начальная_передача>..<конечная_передача>] - подготовить файлы с патчами для отправки по электронной почте. Использовать либо все передачи начиная с начальной до текущей, либо все передачи в указанном интервале.
git format-patch -o <директория_вывода> - подготовить файлы патчей и сохранить их в указанной директории.
git format-patch --stdout - подготовить файлы патчей и вывести их содержимое в консоль.
git apply <файл_патча> - добавить изменения в файлы проекта из файла патча. Подобным образом можно добавлять файлы, созданные с помощью следующих команд.
$ git diff <старт-метка>..<финиш-метка> > <имя>.patch
$ git log -p <старт-метка>..<финиш-метка> > <имя>.patch
git am {<mbox-файл> | <файл_патча>} - добавить изменения в файлы проекта из файла патча. Подобным образом можно добавлять файлы, созданный с помощью следующей команды.
$ git format patch <старт-метка>..<финиш_метка> -о <директория>
git am -i {<mbox-файл> | <файл-патча>} - добавить изменеия в файлы проекта в интерактивном режиме.
git am -3 {<mbox-файл> | <файл-патча>} - добавить изменения в файлы проекта. При возникновении конфлика добавить конфликтные маркеры в файлы с конфликтами.
Отправка патчей по электронной почте
Для отправки почты необходимо установить пакет sendmail.
git send-email --from=<адрес_отправителя> --to=<адрес_получателя> {<список_файлов> | <директория>} - отправить на указанный адрес либо перечисленные файлы патчей, либо все файлы в указанной директории.
Настройка git send-email
--------------------------
# ~/.gitconfig
[sendemail]
smtpserver = <адрес_smtp-сервера> (smtp.gmail.com)
smtpserverport = <порт_smpt-сервера> ({587 | 465})
smtpencryption = <криптографический_протокол> ({tls | ssl})
smtpuser = <логин> (login@gmail.com)
smtppass = <пароль> (password)
from = <адрес_отправителя>
to = <адрес_получателя>
confirm = {always | never}
git format-patch --stdout {<начальная_передача> | <интервал>} | git imap-send - загрузить файлы патчей в директорию с черновиками на почтовом сервере.
Настройка git imap-send
-------------------------
# ~/.gitconfig
[imap]
folder = <директория_с_черновиками> ([Gmail]/Черновики)
host = <адрес_почтового_сервера> ({imaps:// | imap://}imap.gmail.com)
port = <порт_почтового_сервера> ({993 | 143})
user = <логин> (login@gmail.com)
pass = <пароль> (password)
sslverify = <логическое_значение> ({false | true})
Восстановление и очистка
git gc - удалить ненужные файлы и произвести оптимизацию локального репозитория.
git reflog - отобразить журнал изменений.
Пошаговый поиск проблемных передач
git bisect start <проблемная_передача> <беспроблемная_передача> - начать пошаговый поиск в указанном интервале.
git bisect bad - отметить передачу как проблемную.
git bisect good - отметить передачу как беспроблемную.
git bisect reset - закончить пошаговый поиск.
git bisect reset <метка> - закончить пошаговый поиск и установить указатель HEAD на отмеченную передачу.
Примеры
Создание локального репозитория
1. $ mkdir project; cd project; git init
2. $ touch README; git add .; git commit -m 'init'
3. $ mkdir ../project.git; git init --bare ../project.git
4. $ git remote add origin file://<путь_к_project.git>
5. $ git push origin master
Добавление субмодуля
1. $ git submodule add <путь> <имя>
2. $ git submodule init <имя>
Добавления субмодуля в составе склонированного репозитория
1. $ git submodule init <имя>
2. $ git submodule update <имя>
Исправление журнальной записи передачи
1. $ git rebase -i <хэш_родительской_передачи_для_проблемной>
2. Откроется текстовый редактор с перечнем передач.
3. Сменить метки pick на edit во всех проблемных передачах.
4. Сохранить изменения и закрыть редактор.
5. $ git commit --amend
6. Откроется редактор с текстом журнальной записи.
7. Исправить запись, сохранить изменения, закрыть редактор.
8. $ git rebase --continue
9. Повторить шаги 5-8 для всех проблемных передач.
Разбивка одной передачи на несколько
1. $ git rebase -i <метка>
2. Откроется текстовый редактор с перечнем передач.
3. Сменить метку pick на edit в проблемной передаче.
4. $ git reset HEAD^
5. Измененный файл окажется в невыставленной области.
6. $ git add -e
7. Отредактировать файл, добавляя необходимые изменения.
8. $ git commit
9. Повторить шаги 6-8 для всех изменений.
10. $ git rebase --continue