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

Основы GIT

Общее

  • Основное удаленное репо по соглашению называется origin.
  • Все ссылки на файлы могут использовать подстановочные знаки, например. git add *.txt добавит все файлы, заканчивающиеся на .txt
  • Сообщения о фиксации должны быть в настоящем времени
  • Коммиты GIT для конфликтов слияния конфликтов не нуждаются в сообщениях
  • Все в .git/info/exclude будет игнорироваться
git help <command>  # gets documentation for the given command

Конфигурации

git config --list                       # перечислить все конфигурации
git config <config>                     # отображает установленную конфигурацию. например "git config user.email"
git config --global user.name "<name>"  # установить имя пользователя (remove --global if only for current repo)
git config --global user.email <email>  # установить электронную почту пользователя (remove --global if only for current repo)
git config --global color.ui true       # включить цветной интерфейс в консоли
git config --global alias.co checkout   # дать "checkout" команду псевдонимом "co"
git config --global core.editor emacs   # пользовательский emacs для интерактивных команд
git config --global merge.tool opendiff # используйте графический интерфейс opendiff для слияния конфликтов (OS X только)

Ignores

  • Все в .git/info/exclude будет игнорироваться GIT
  • Все пути, указанные в .gitignore игнорируются git, например:
# в файле .gitignore
logs/   # игнорировать все в каталоге журналов
*.pyc   # игнорировать все с расширением *.pyc
*/*     # игнорировать все в подпапках 

Basics

git init                  # инициализирует локальный пустой репозиторий git в текущем каталоге
git status                # показывает текущую ветку, какие обновления поставлены, а какие нет
git mv <file1> <file2>    # переименует файл1 в файл2 и внесёт изменения

Pointers

  HEAD                # указатель указывает на самую последнюю фиксацию в текущей ветке
  HEAD^               # first parent of head. HEAD^^ or HEAD~2 for second parent of head and so on

Remote

git remote add <remote> <URL> # добавить удаленный репозиторий, используя URL-адрес с заданным именем
git remote -v                 # отображает псевдоним для всех удаленных URL-адресов
git remote rm <remote>        # удалять remote данного имени
git remote show <remote>      # show all remote branches for the given remote and if they are tracked or not
git remote prune <remote>     # очистить удаленные ветки для remote

Clone

git clone <URL> (folder name) # клонирует удаленное репо в его имя папки по умолчанию или пользовательское имя, если указано имя папки
git clone <URL> --recursive   # клонирует репо вместе с подмодулями и подмодулями подмодулей и т. д.

Fetch

git fetch <remote>            # извлекает любые изменения из удаленного репо и помещает их в ветку <remote>/master
git merge <remote>/master     # объединяет извлеченные изменения с основной веткой удаленного

Pull

git pull <repo> <branch>      # автоматически извлекать и объединять из удаленной ветки в текущую ветку

Push

git push <remote> <branch>    # зафиксировать изменения в указанной ветке удаленного репо. Создает удаленную ветку, если это еще не сделано
git push <remote> <local-branch-name>:<remote-branch-name> # отправить изменения из локальной ветки в удаленную ветку с другим именем
git push -u origin master     # -u указывает Git запомнить параметры (имя и ветку), чтобы в следующий раз мы могли просто запустить "git push"
git push origin :a_branch     # удаляет удаленную ветку в источнике. Примечание: локальная ветка все еще сохраняется

Add

git add <list of files>   # поместить все файлы (через пробел) в список
git add .                 # stage все файлы, которые либо изменены, либо созданы и не игнорируются. т.е. не совершают действий rm
git add -u                # только вносит изменения в уже отслеженные файлы. т. е. только изменение стадии или действия rm. Не создает новые файлы
git add -A                # Добавляет все новые или измененные файлы. То же, что и git "add --all", что эквивалентно "git add .; git add -u"

Remove

git rm <file>             # удалить фактический файл с диска, а также выполнить удаление
git rm --cached <file>    # удалить отслеживание файла, но сохранить локальную копию
git rm -rf <folder>       # удалить рекурсивно и принудительно (без подтверждений)

Diff

git diff HEAD           # сравнивает различия между текущим репо и HEAD (может быть опущен). т. е. показывает неустановленные различия с момента последней фиксации
git diff <ptr1> <ptr2>  # сравнивает различия между двумя состояниями, указанными указателями (также могут быть ветвями), например. "git diff HEAD^ HEAD"
git diff --staged       # изменения, которые только что были поставлены

Commit

git commit -m '<msg>'         # фиксирует подготовленные файлы с сообщением 'my message'
git commit -am '<msg>'        # пропустить промежуточный шаг, добавить обновленный файл (только отслеживаемый) и зафиксировать. Примечание. Не промежуточные новые добавленные (неотслеживаемые) файлы
git commit --amend -m "<msg>" # добавляет все, что в настоящее время подготовлено, к последнему коммиту

Reset

git reset HEAD <file>     # unstage changes to file since last commit. Note: defaults to HEAD if it's not specified
git reset --soft HEAD^    # undo last commit and move everything from that commit back into staging. --soft indicates reset into staging. sets HEAD as HEAD^
git reset --hard HEAD^    # undo last commit and all changes. --hard indicates do not keep changes

Blame

git blame <file> --date short # see all changes made to the file linewise in the format of "<SHA> (<username> <date> <line no>) <change>"

Branch

git branch                # отображает все ветки (* указывает на текущую ветку)
git branch -r             # перечисляет все удаленные ветки (используйте git checkout <branch>, чтобы настроить как локальную ветку). Примечание: не запрашивает remote для проверки новых веток. Чтобы увидеть новую удаленную ветку, вам сначала нужно выполнить выборку или извлечение
git branch <branch>       # создает новую ветку из текущей ветки с именем MyBranch
git branch -D <branch>    # удалить ветку
git branch -d <branch>    # удалить ветку (безопаснее), если изменения не были объединены, эта команда завершится ошибкой, в отличие от "-D"
git merge <branch>        # объединяет ветку с текущей веткой

Checkout

git checkout -b <branch>  # создает новую ветку и переключается на нее
git checkout <branch>     # переключается на существующую ветку
git checkout master       # переключиться на основную ветку
git checkout --force      # restore/undo change (prior to commit)
git checkout -b <branch>  # создает или сбрасывает ветку (если существует), а затем переключается на нее
git checkout -- <file>    # отменить все изменения и вернуть файл в его состояние при последнем коммите

Rebase

Rebasing a branch with master

git checkout my_branch # переключается на my_branch
git rebase master      # перебазировать текущую ветку с мастером. то есть сначала запустите основную фиксацию, а затем ветку
git checkout master    # переключается на мастер
git merge my_branch

Rebasing master with remote master

git checkout master    # switches to master branch
git fetch              # fetches from remote and puts new commits in origin/master branch
git rebase             # brings local master commits to temporary branch, runs all origin/master on local master branch, then all commits on temporary branch one at a time
git rebase --continue  # resolves conflicts one after another

Tagging

git tags                              # перечислить все теги
git tag -a v0.0.3 -m "Version 0.0.3"  # добавление тега с описанием
git checkout <tag>                    # checkout к заданному тегу
git push --tags                       # push tags. Необходимо указать явно, иначе теги просто останутся локально

Submodules

Add a submodule of a specific branch

git submodule add --branch extension-framework https://github.com/leongwaikay/OMRChecker.git

Log

Look at commit logs i.e. all the changes committed so far via:

git log

Formatting

git log --pretty=oneline                      # prints line "<SHA> <commit msg>" for each commit
git log --pretty=format: "%h %ad- %s [%an]"   # custom format using placeholders. %ad:author date, %an:author name, %h:sha hash, %s:subject, %d:ref names
git log --oneline -p                          # -p for patch. shows every modifications linewise for each commit
git log --oneline --stat                      # how many insertions and deletions for each file included in each commit
git log --oneline --graph                     # visual representation

Time filters

git log --until=1.minute.ago
git log --since=1.day.ago
git log --since=2000-01-01 --until=2012-12-21

Инициализация и конфигурация


git init    # инициализировать репозиторий; создает скрытую папку .git

# Клонирование к текущей (.) папке
git clone ssh://git@gitlab.example.com/group/repository.git .

# Клонирование с уменьшением глубины --depth 5 или без всей истории --depth 1
git clone -- depth 5 -- no-single-branch --no-tags ssh://git@[…]/ repository.git .

    # -- depth 1                      # клонирование репо без всей истории
    # -- no-single-branch             # тянет все филиалы иначе только текущий
    # -- no-tags                      # без тегов
    # --filter=blob: limit= [kmg]  # разбивает большой файл blobs на n bytes.

    # Единицы: k, m, g или KiB, MiB, GiB например: blob: limit=1k - это то же самое, что blob: limit=1024
    # Проверьте самый большой файл PNG, JPG, WEBP и установите такой предел!

git config --list # отображает всю конфигурацию
    # Диапазоны:
    # -- system     # системная система, как правило, не использовать;
    # -- global     # глобальный для пользователя:~/.gitconfig
    # -- local      # локально для данного репо .git / config

git config -- global -- list                            # отображает глобальные настройки git
git config <ключ> <значение>                            # устанавливает конфигурацию для ключа
git config --global user.name 'Ivan Ivanov'             # глобально устанавливает имя владельца репо
git config --global user.email ivan.ivanov@gmail.com    # глобально устанавливает электронную почту владельца репо
git config push.followtags true                         # найстройка pusha, аннотированные теги будут отправлены автоматически
git config <ключ>                                       # отображает конфигурацию для ключа
git config --global user.name                           # отображение глобального пользователя
git config --unset <ключ>                               # очищает конфигурацию для указанного ключа
git config --local --unset user.email                   # удаляет локальную электронную почту

git config --edit                                       # редактирование локального файла конфигурации
git config --edit --global                              # редактирование глобального файла конфигурации
git config --edit --system                              # редактирование системного файла конфигурации
git config --edit --local                               # редактировать файл конфигурации для текущего репо

# Создание файла общей/версионной конфигурации для всех сотрудников
git config -- file .gitprjconfig <группа>.<ключ> <значение>
git config -- file .gitprjconfig push.followtags true

git config include.path ../.gitprjconfig # Настроит локальную конфигурацию .git / config отсюда ..
# Условное включение конфигурации из дополнительного файла
git config --global includeif.gitdir: / C / VHOST / project/.path .gitconfig.ролл

Журнал коммитов

git log                             # список коммитов
git log --oneline                   # стиль одной строки
git log -4 --oneline                # 4 последних коммита в одной строке
git log --graph --oneline           # log с нарисованными ветвями
git log --oneline> файл.txt        # перенаправление gitlog в файл
git log --oneline | grep -i sql     # поиск слова 'SQL' в одной строке (case insensitive)
git log | grep -i sql               # поиск слова 'SQL' в полной версии
git log --diff-filter=A --file      # поиск файла с фильтром: A_dded C_opied D_eleted M_odified R_enamed
git log -S "отличительная строка"   # отображает commity, которые изменяли количество вхождений характерной строки

Читать по теме
Интересные статьи