Основные команды 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, которые изменяли количество вхождений характерной строки