- Инициализация и клонирование репозиториев
- Настройка информации о пользователях, используемой во всех локальных репозиториях
- Отмена изменений
- Переписывание Git History
- Git Branches
- Удалённые репозитории
- Временные коммиты
- git config
- git log
- git diff
- git reset
- git rebase
- git pull
- git push
Инициализация и клонирование репозиториев
git init <directory>
Создает пустой Git-репозиторий в указанной директории. Если запустить его без аргументов, то будет использоваться текущий каталог, как репозиторий git.
git clone <repo>
Клонирует репозиторий по ссылке <repo>
на локальный компьютер. Оригинальный репозиторий может находиться в локальной файловой системе или на удаленном компьютере через HTTP или SSH.
Настройка информации о пользователях, используемой во всех локальных репозиториях
git config --global user.name “firstname lastname”
Определяет имя автора, которое используется во всех коммитах в текущем репозитории. Обычно используется флаг —global, чтобы установить параметры конфигурации для текущего пользователя.
git config --global user.email “valid-email”
Определяет адрес электронной почты, который будет связан с каждым маркером истории.
git config --global color.ui auto
Устанавливает автоматическую раскраску командной строки для Git, для удобства просмотра.
git add <directory>
Помещает все изменения из указаной <directory>
в промежуточную область для следующего коммита. Заменив <directory>
на <file>
, файл будет добавлен в промежуточную область.
git add .
Помещает все твои изменения в текущей директории в промежуточную область.
git commit -m "<message>"
Создает коммит сообщение для изменений в промежуточной области, но, вместо запуска текстового редактора использует <message>
в качестве сообщения.
git commit -am "<message>"
Помещает все изменения в текущей директории в промежуточную область и создаст коммит сообщение с <message>
в качестве сообщения.
git status
Показывает список измененных файлы в рабочем каталоге: добавлених в промежуточную область или нет.
git log
Показывает всю историю коммитов, используя формат по умолчанию. Для настройки см. дополнительные параметры.
git diff
Показывает изменения в рабочем каталоге которые еще не добавлены в промежуточную область.
git diff --staged
Показывает изменения в рабочем каталоге которые были добавлены в промежуточную область но еще не закоммичены.
Отмена изменений
git revert <commit>
Создает новое коммит сообщение, которое отменяет все изменения, сделанные в данном <commit>
(хеш коммита), затем применяет его в текущей ветке. Более подробно здесь.
git reset <file>
Убирает <file>
из промежуточной области, но оставляет рабочий каталог без изменений.
git checkout <file>
Отменяет изменения только для определенного файла или каталога, которые не были добавлены в промежуточную область.
Переписывание Git History
git commit --amend
Изменяет последнее коммит сообщение и добавляет изменения из промежуточной области. Для того что бы просто изменить сообщение последнего коммита нужно что бы в промежуточной области не было изменений. Более подробно здесь.
git rebase <base>
Переносит текущую ветку поверх <base>
. <base>
- может быть хешем коммита, именем ветки, тегом или относительной ссылкой на HEAD. Применяет любые коммиты текущей ветки поверх указанной.
git reflog
Показывает журнал изменений в HEAD локального репозитория. Добавь флаг —relative-date, чтобы показать информацию о дате, или —all, чтобы показать все ссылки.
git reset --hard [commit]
Очищает промежуточную область, переписывает рабочее дерево до определенного коммита.
Git Branches
git branch
Выводит список всех веток в репозитории. Добавь аргумент <branch>
, чтобы создать новую ветку с именем <branch>
.
git checkout -b <branch>
Создает и переходит на новую ветку с именем <branch>
. Удали флаг -b
, чтобы перейти на существующую ветку.
git merge <branch>
Объединяет указанную ветку <branch>
в текущую.
Удалённые репозитории
git remote add <name> <url>
Создает новое подключение к удалённому репозиторию. После добавления пульта ты можешь использовать <name>
в качестве ярлыка для <url>
в других командах.
git fetch <remote> <branch>
Извлекает определенную ветку <branch>
из репозитория. Убираем <branch>
, чтобы получить все удалённые ссылки.
git pull <remote>
Стягивает указанную удалённую копию текущей ветки и немедленно объединит её с локальной копией.
git push <remote> <branch>
Отправляет локальную ветку в удалённый репозиторий. Создает именованную ветку в репозитории, если такой не существует.
git merge <remote> <branch>
Объединяет удалённую ветку с текущей веткой, для её обновления.
Временные коммиты
git stash
Временно хранит все изменения в рабочей директории.
git stash list
Выводит список сохраненных измененных файлов.
git stash pop
Восстанавливает самое последнее сохранение файлов.
git stash drop
Сбрасывает последние сохраненные изменение.
Более поздобнее про stash
в этом посте
git config
git config --global user.name <name>
Определяет имя автора, которое будет использоваться для всех коммитов текущим пользователем.
git config --global user.email <email>
Определяет адрес электронной почты автора, который будет использоваться для всех коммитов текущим пользователем.
git config --global alias. <alias-name> <git-command>
Создает псевдоним (alias) для команды Git. Например: alias.glog log --graph --oneline
установит git glog
, эквивалентный git log --graph --oneline
.
git config --system core.editor <editor>
Устанавливает текстовый редактор, используемый командами для всех пользователей на машине. <editor>
аргумент должен быть командой, которая запускает нужный редактор (например, vi).
git config --global --edit
Открывает файл глобальной конфигурации в текстовом редакторе для ручного редактирования.
git log
git log -<limit>
Ограничивает количество коммитов на <limit>
. Например: git log -5
ограничит до 5 коммитов.
git log --oneline
Конденсирует каждый коммит в одну строку.
git log -p
Показывает полный diff
последнего коммита.
git log --stat
Указывает, какие файлы были изменены, и относительное количество строк, которые были добавлены и удалены из каждого из них.
git log --author=”<pattern>”
Ищет коммити определенного автора.
git log --grep=”<pattern>”
Ищет коммити с сообщением коммита, которое соответствует <pattern>
.
git log <since>..<until>
Показывает коммиты, которые происходят между <since>
и <until>
. Аргументы могут быть идентификатором, именем ветки, HEAD или любым другим видом ссылки.
git log -- <file>
Отображает только те коммиты, которые имеют указанный файл.
git log --graph --decorate
Флаг --graph
рисует, основанный на тексте, график коммитов в левой части коммит-сообщений. --decorate
добавляет имена веток или тегов, показанных коммитов.
git diff
git diff HEAD
Показывает разницу между рабочим каталогом и последним коммитом.
git diff --cached
Показывает разницу между изменениями в промежуточной области и последним коммитом.
git reset
git reset
Сбрасываает промежуточную область в соответствии с последним коммитом, но оставляет рабочий каталог без изменений.
git reset --hard
Сбрасывает промежуточную область и рабочий каталог в соответствии с последним коммитом и перезаписывает все изменения в рабочем каталоге.
git reset <commit>
Перемещает верхушку текущий ветки назад к <commit>
; сбрасывает промежуточную область, чтобы соответствовать коммиту, но оставляет рабочий каталог.
git reset --hard <commit>
Делает то же, что и предыдущий, но сбрасывает как промежуточную область, так и рабочий каталог для соответствия. Удаляет не зафиксированные изменения и все коммиты после <commit>
.
git rebase
git rebase -i <base>
Интерактивное перебазирование текущей ветки на новую базу (хеш коммита). Запускает редактор для ввода команд о том, каким образом каждый коммит будет перенесен на новую базу.
git pull
git pull --rebase <remote>
Стягивает удаленную копию текущей ветки и перемещает её в локальную копию. Использует git rebase
вместо merge
для интеграции веток.
git push
git push <remote> --force
Принудительная отправка изменений git
, даже если они приводят к конфликтному слиянию (non-fast-forward). Не используй флаг --force
, если не уверен, что знаешь, что делаешь.
git push <remote> --all
Отправка всех локальных веток на указанный <remote>
.
git push <remote> --tags
Теги не отправляются автоматически, когда ты отправляешь ветку или используешь флаг --all
. Флаг --tags
отправляет все локальные теги в удаленный репозиторий.