Шпаргалка по Git

Полезные команды и параметры утилиты Git.

Git

git branch -a посмотреть в какой ветке мы находимся и показать все ветки ключ -а all
git branch newbranch — создать новую ветку с именем newbranch
git branch -f master / — перенести HEAD ветки master на коммит или на HEAD ветки , если ветки master нет, то создать ее
git branch -d — удалить ветку , или с флагом -D если в ветке есть коммиты, не смердженные в другие ветки

git checkout newbranch — перейти в новую ветку
git checkout -b newbranch — создать новую ветку с именем newbranch и сразу перейти в нее
git checkout -b master / — создать новую ветку master с HEAD указываюшим на коммит или на HEAD ветки и переключиться на нее
git checkout -B master / — перенести HEAD ветки master на коммит или на HEAD ветки и переключиться на нее
git checkout / — скопировать в текущую рабочую директорию файл с расположением из HEAD ветки с именем или из коммита
git checkout HEAD или git checkout — перенести файл из репозитория(если указан HEAD) или индекса( если 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 — скопировать указанный(e) коммит(ы) с любой ветки по хэшу коммита.
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 — удаляет директорию в файловой системе и одновременно вносит это изменение в индекс, то же самое, что и ‘rm -r ‘ + ‘git add
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 ‘//’,’/<\/head>/’:index.html — Посмотреть историю изменений между строками c текстом и в файле index.html.
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 вывести различия между коммитом на текущий момент и коммитом, который был на момент, когда ветка с коммитом отделилась от ветки с коммитом
git diff —name-only — вывести только названия файлов с изменениями, без самих изменений.
git diff —no-index — вывести текущие изменения между файлами, даже если файлы не отслеживаются Git
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

Напишите комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *