Памятка про git

Получение помощи
  • git help <command name>
Глобальные настройки
  • git config --global user.name "John Doe"Указать глобальный username
  • git config --global user.email johndoe@example.comУказать глобальный e-mail
  • git config --global core.editor emacsУказать редактор, который будет использоваться, когда нужно ввести сообщение в Git
  • git config --global merge.tool vimdiffУказать утилиту сравнения, которая будет использоваться для разрешения конфликтов слияния
  • git config --listПросмотреть используемые настройки
Клонирование проекта
  • git clone https://USERNAME:PASSWORD@bitbucket.org/repository_name/project.gitпо паролю
Обновление локальной master-ветки с сервера

Выполняется в ветке master

  • git fetch --all
  • git merge origin/master

или

  • git pull
Ветвление
  • git branch список веток
  • git branch new-branch создать новую ветку
  • git checkout -b new-branch создать новую ветку и переключиться на нее
  • git branch -d new-branch удалить ветку
  • git branch -D new-branch удалить ветку в любом случае
  • git branch -m new-name-branch переименовать ветку
  • git branch --contains v1.2 показать те ветки, среди предков которых есть определенный коммит
  • git branch --merged показать смерженные ветки
Diff различия
  • git diff показать изменения, не внесенные в индекс
  • git diff --cached показать изменения, внесенные в индекс
  • git diff f292ef5 изменения в конкретном коммите
  • git diff HEAD изменения в проекте по сравнению с последним коммитом
  • git diff HEAD^ изменения в проекте по сравнению с предпоследним коммитом
  • git diff master..experimental сравнить «головы» веток
  • git diff experimental сравнить активную ветку с какой-либо
Отмена коммитов
  • git commit -a --amend добавляет к последнему коммиту новые изменения
  • git reset --soft HEAD^ отменяет последний коммит, но сохраняет все сделанные изменения
  • git revert config-modify-tag отменяем коммит, помеченный тегом
  • git revert cgsjd2h отменяем коммит, используя его хэш
Команды, помогающие отслеживать изменения файлов
  • git blame README выводящую построчную информацию о последнем коммите, коснувшемся строки, имя автора и хэш коммита
  • git blame -L 2,+3 README выведет информацию по трем строкам, начиная со второй.
  • git annotate README аналогично команде blame
Удаление файлов
  • git rm --cached удалить файл из индекса, но оставить на диске
  • git rm удалить файл с диска
Работа в ветке
  • git status показать статус — список измененных незакоммиченных файлов
  • добавление файлов в индекс
  • git add <file>
  • git add myFile*
  • git add <dir1> <dir2> <file1>
  • git add . Добавить ВСЁ в текущей директории
  • git add -p Добавлять фрагментами дифа, просматривая каждое изменение
  • git add -N . Добавить все «новые» файлы под контроль без содержимого (только путь), т.е. git покажет содержимое этих файлов в diff
  • git rm удалить файл или директорию
  • git ls-files -d | xargs git rm Если файлы удалили ручками без git rm, тогда это поможет удалить их для git скопом
  • git mv переименовать файл, фактически это 2 команды add NEW + rm OLD
  • Diff
  • git diff --cached просмотреть изменения, которые будут закоммичены (добавлены как git add)
  • git diff просмотреть изменения, которые не «добавлены»
  • git diff HEAD просмотреть все измения
  • git diff -b -w посмотреть диф без учета пробелов
  • Новые файлы (не добавленные через git add) diff не показывает. Или можно добавить их через git add -N
  • Коммит
  • git commit -m "commit comment" закоммитить изменения добавленные через git add
  • git commit -a закоммитить все изменения, новые файлы (не добавленные через git add) не коммитятся
  • git commit <file> <dir>— закоммитить указанные файлы (независимо от git add)
  • Отменить текущие незакоммиченные изменения в файлах
  • git checkout <file> <dir> откатить не «добавленные» измения
  • git reset HEAD <file> <dir> отменить git add
Окончание работы над задачей
  • Переключаемся на master
  • git checkout master
  • Обновляем его (как описано выше)
  • Мержим нашу ветку в мастер
  • git merge --no-ff <имя ветки>
  • Если были конфликты — резолвим их
  • git mergetool
  • Если merge tool не был сконфигурирован ранее — настраиваем его на kdiff3 (нужно предварительно установить сам kdiff3)
  • git config --global merge.tool kdiff3
  • Когда конфликтов больше нет — коммитим (только если были конфликты, если нет — коммит с мержем будет сделан автоматом)
  • git commit
  • После мержа локальный бранч нам больше не нужен
  • git branch -d <branch name>
  • Отправляем наши коммиты на сервер
  • git push origin master
Просмотр истории
  • git show выводит информацию об объектах (коммитах, метках, деревьях и пр.)
  • git show показать последний коммит
  • git show fb47ddb2 показать указанный коммит
  • git show HEAD^ предыдущий коммит (второй с конца)
  • git show HEAD^^ третий коммит с конца
  • git show HEAD~4 пятый коммит с конца
  • мержи
  • git show HEAD^1 show the first parent of HEAD
  • git show HEAD^2 show the second parent of HEAD
  • git show my-branch:src/Path/to/file/file.php посмотреть версию конкретного файла
  • log
  • git log вывести список коммитов по условию
  • git log v2.5.. commits since (not reachable from) v2.5
  • git log test..master commits reachable from master but not test
  • git log master..test …reachable from test but not master
  • git log master...test …reachable from either test or master, but not both
  • git log origin/master..master разница с внешним хранилищем — что надо закоммитить
  • git log --since="2 weeks ago" commits from the last 2 weeks
  • git log Filename commits which modify Filename
  • git log fs/ … which modify any file under fs/
  • git log -S'foo()' commits which add or remove any file data matching the string ‘foo()’
  • git log --no-merges Не показывать мерджи
  • git log -n 5 -p --reverse FILE Посмотреть последние 5 дифов указанного файла
Stash
  • Сохранить текущие незакоммиченные правки, чтобы переключиться в другую ветку для срочной работы
  • git stash save "Моя незаконченная работа"
  • … переключаемся в другую ветку, работаем там и возвращаемся обратно
  • Восстанавливаем спрятанные правки
  • git stash apply поднимет последнее сохранение
  • git stash apply stash@{0} или явно указать номер
  • git stas clear полностью очистить все сохраненные состояния
  • или
  • git stash pop восстановить правки и удалить запись о них
  • Просмотреть список всех сохраненных состояний
  • git stash list
Работа с patch
  • git format-patch -n HEAD^patch последнего коммита
  • git format-patch master --stdout > patch.patchpatch всех коммитов по сравнению с веткой master
  • git format-patch HEAD~~делает несколько patch по всем подготовленным коммитам (в данном случае по 2-м последним)
  • git apply --check 0005-patch-process.patchпроверка patch перед применением
  • git am --signoff < 0005-patch-process.patchприменение patch
Создание репозитория из существующего проекта
  • cd existing_folder
  • git init
  • git remote add origin git@gitc4-int-v.lucky-labs.com:sergey/common-bundle.git
  • git add .
  • git commit
  • git push -u origin master
Показать ветку в коммандной строке
  • sudo gedit ~/.bashrc
  • PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[01;33m\]$(__git_ps1)\[\033[01;34m\] \$\[\033[00m\] '