Полезные команды и параметры утилиты Git.
git branch -a посмотреть в какой ветке мы находимся и показать все ветки ключ -а all
git branch newbranch — создать новую ветку с именем newbranch
git branch -f master
git branch -d
git checkout newbranch — перейти в новую ветку
git checkout -b newbranch — создать новую ветку с именем newbranch и сразу перейти в нее
git checkout -b master
git checkout -B master
git checkout
git checkout HEAD
git checkout @{-N} — вернуться на N последних переключений между метками.
git checkout -f — удалить изменения в рабочей директории, которые были выполнены после последнего коммита, то есть сбросить изменения на текущий HEAD.
git checkout —conflict=diff3 —merge index.html — при конфликте в слиянии просмотреть все изменения файла index.html, как в двух сливаемых ветках, так и в версии файла, общей для двух веток.
git config —global merge.conflictStyle diff3 — глобально установить вывод конфликтующих изменений, как в предыдущей команде.
git push origin newbranch — (сначала переключиться на мастер) отправить в удаленный репозиторий ветку newbranch
git branch -d newbranch — удалить ветку newbranch из локального репозитория
git push origin —delete newbranch — удалить ветку newbranch в удаленном репозитории
git reset HEAD~1 (—soft) — откатить HEAD на 1 коммит назад, о же самое — git reset @~. —soft — оставить изменения в рабочей директории
git reset —hard — восстановить состояние всех файлов(в том числе измененных в рабочей директории и не добавленных в индекс) на последний коммит(HEAD)
git reset —merge — восстановить состояние файлов(кроме измененных в рабочей директории и не добавленных в индекс) на последний коммит(HEAD)
git merge —abort — отменить слияние, то есть восстановить состояние файлов(кроме измененных в рабочей директории и не добавленных в индекс) на последний коммит(HEAD). То же самое, что и git reset —merge
git merge —continue — продолжить слияние после разрешения конфликта, то же самое, что и выполнение git commit после разрешения конфликта.
git merge —no-ff branchname — выполнить влияние веток с помощью отдельного коммита слияния, а не «перемоткой». Н-р, когда нужно сохранить историю ветвления. Можно установить такой режим слияния по умолчанию настройкой config: git config merge.ff false, то же для отдельной ветки: git config branch.branchname.mergeoptions ‘—no-ff’
git merge -ff branchname — слияние веток «перемоткой»(режим по умолчанию)
git merge —squash branchname — выполнить слияние изменений всех коммитов из ветки branchname в текущую рабочую директорию(в истории текущей ветки не будет коммитов из branchname, а только один коммит, объединяющий все изменения). Внимание: при использовании опции —squash не будут доступны опции —abort и —continue
git commit —amend -m «Commit name» — переименовать последний коммит
git cherry-pick
git cherry-pick branchname1..branchname2 — скопировать коммиты ветки branchname2, которых нет в ветке branchname1
git cherry-pick имеет такие же параметры как и git merge: ‘—continue’ и ‘—abort’, а также параметр ‘—quite’, все эти параметры используются в процессе работы над конфликтами, которые могут возникнуть при работе cherry-pick.
git cherry-pick —no-commit|-n
git add -p
git commit -a -m «Commit title» — объединение комманд git add -A и git commit -m. Внимание: флаг -a добавит только уже проиндекcированные файлы, а новые файлы не будут добавлены.
git commit -m «Commit title»
git rm -r
git mv
git rm —cached
git stash — отложить незакоммиченые изменения с последнего коммита, тем самым сделав рабочую директорию чистой без необходимости коммитить эти зменения.
git stash pop — применить(вернуть) ранее отложенные командой git stash изменения
git log —oneline — вывести историю коммитов с сокращенной до одной строки информацией
Пример форматирования вывода git log:
git log —pretty=format:’%h %cd %s %d %an’
— %h — сокращенный хэш коммита
— %cd — дата
— %s — заголовок коммита
— %d — ссылки на коммит
— %an — имя автора
git log —oneline —all —graph — вывести историю коммитов с сокращенной до одной строки информацией и схематическим обозначением ветвления.
git log branch1..branch2 — вывести историю коммитов ветки branch1 с момента ее отделения от ветки branch2
git log branch1…branch2 — вывести историю коммитов ветки branch1 и ветки branch2 с момента их разделения(но не их общие коммиты)
git log —grep someword — вывести журнал коммитов, в названии которых есть строка «someword»(По умолчанию регистр имеет значение). Можно указать регулярное выражение вместо строки.
git log -Gsomeword — вывести журнал коммитов, в изменениях которых есть слово «someword»(По умолчанию регистр имеет значение). Можно указать регулярное выражение вместо строки.
git log -L ‘/
git log branchname —first-parent — вывести историю коммитов только самой ветки ‘branchname’ без учета сторонних коммитов(которые могли попасть из другой ветки в ‘branchname’ после слияния)
git blame index.html -L 5,10 — вывести информацию о дате, коммите и авторе изменений в файле index.html в строках с 5-й по 10-ю
git reflog — показать историю операций, которые приводили к изменению ссылок: коммиты, переключения между ветками, и т.д. То же самое, что и вызов команды ‘git log —oneline -g’
git show :/someword — поиск коммитов со строкой ‘someword’ в названии коммита
git clean -dfx — удалить все неотслеживаемые файлы и директории, в том числе указанные в .gitgnore. Ключ «-d» — удалить директории, «x» — удалить и файлы, указанные в .gitgnore
git diff — выводит различия между рабочей директорией и индексом(изменения добавленные с помощью git add, но не закомиченные)
git diff HEAD — выводит различия между рабочей директорией и репозиторием(закоммиченные изменения)
git diff —cached — выводит различия между индексом(изменения добавленные с помощью git add, но не закоммиченные) и репозиторием(закоммиченные изменения)
git diff
git diff
git diff —name-only — вывести только названия файлов с изменениями, без самих изменений.
git diff —no-index
git diff HEAD^1 и git diff HEAD^2 — показать отличия текущего состояния(после слияния) от первого и второго родителей коммита соответственно. В отличие от ‘~’ оператор ‘^’ используется в основном для работы с коммитами слияния.
git rebase -x ‘some command’ branchname — параметр ‘-x’ позволяет указать команду, которую git rebase запустит при перебазировании, полезно н-р для запуска тестов перед тем, как rebase применит коммит.
git rebase —rebase-merges branchname — выполнить перебазирование с учетом коммитов слияния(по умолчанию rebase пропустит коммиты слияния)
git rebase -i branchname — выполнить перебазирование в интерактивном режиме, где можно выбрать нудные коммиты, переименовать их, поменять очередность и т.д.
Нюансы:
— Команда git diff не учитывает изменения файлов, которые не были добавлены в Git(untracked)
— Журнал reflog по умолчанию сохраняет записи для последних 90 дней, или для последних 30 дней, если ветка была удалена. reflog не передается на сервер, хранится только локально.
— Для полной очистки рабочей директории от несохраненных изменений нужно удалить как изменения в отслеживаемых файлах(н-р командой git reset…), так и неотслеживаемые файлы(н-р командой git clean…)
— Параметр ‘—‘ в командах Git указывает, что далее пойдет путь, а не н-р название ветки. Н-р: git diff — master — указывает, что master то имя файла или директории, а не ветки.
— Операторы ‘..’ и ‘…’ в разных командах Git могут иметь различное значение.
Полезные ресурсы:
— Документация Git
— Очень информативный скринкаст по Git