Cистема контроля версий Git: расширенная шпаргалка

Git - это популярная система контроля версий. Ее использует практически каждый проект, чья деятельность так или иначе связана с ИТ.

Запомнить все команды с первого раза вряд ли получится, поэтому мы для вас приготовили расширенную шпаргалку.

Полезные руководства по Git

git help -g

Поиск по содержанию

git log -S'<a term in the source>'

Удаленная синхронизация и перезапись локальных изменений

git fetch origin && git reset --hard origin/master && git clean -f -d

Список всех файлов до коммита

git ls-tree --name-only -r <commit-ish>

Отмена коммита

git update-ref -d HEAD

Список всех конфликтующих файлов

git diff --name-only --diff-filter=U

Список всех файлов, измененных коммитом

git diff-tree --no-commit-id --name-only -r <commit-ish>

Изменения с момента последнего коммита

git diff

Изменения, выполненные для коммита

git diff --cached

Альтернатива:

git diff --staged

Показать подготовленные/неподготовленные файлы для коммита

git diff HEAD

Все ветки, которые уже соединены с веткой master

git branch --merged master

Быстрый переход к предыдущей ветке

git checkout -

Альтернатива:

git checkout @{-1}

Удалить ветки, которые уже объединены с master

git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d

Альтернатива:

git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d

Все ветки и выходящие из них, а также последние коммиты на ветке

git branch -vv

Отслеживание ветки

git branch -u origin/mybranch

Удаление локальной ветки

git branch -d <local_branchname>

Удаление ветки

git push origin --delete <remote_branchname>

Альтернатива:

git push origin :<remote_branchname>

Удаление локальной метки

git tag -d <tag-name>

Удаление метки

git push origin :refs/tags/<tag-name>

Отменена локальных изменений

git checkout -- <file_name>

Отмена коммита, создание нового коммита

git revert <commit-ish>

Отмена коммита, предпочительно для приватных веток

git reset <commit-ish>

Повтор предыдущего сообщение коммита

git commit -v --amend

Просмотр истории коммитов для текущей ветки

git cherry -v master

Изменить автора

git commit --amend --author='Author Name <email@address.com>'

Сброс автора, после того как автор был изменен в глобальной конфигурации

git commit --amend --reset-author --no-edit

Изменение удаленного URL

git remote set-url origin <URL>

Получение списка всех удаленных ссылок

git remote

Альтернатива:

git remote show

Получение списка всех локальных и удаленных веток

git branch -a

Получение списка только удаленных веток

git branch -r

Получение списка изменений файла, а не весь файл

git add -p

Получение git bash

curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

Что изменилось за две недели?

git log --no-merges --raw --since='2 weeks ago'

Альтернатива:

git whatchanged --since='2 weeks ago'

Просмотреть все коммиты, сделанные с момента создания ветки мастера

git log --no-merges --stat --reverse master..

Выбор коммитов по веткам с помощью cherry-pick

git checkout <branch-name> && git cherry-pick <commit-ish>

Показать ветки, содержащие commit-hash

git branch -a --contains <commit-ish>

Альтернатива:

git branch --contains <commit-ish>

Git-алиасы

git config --global alias.<handle> <command> 
git config --global alias.st status

Сохранение текущего состояния отслеживаемых файлов без коммитов

git stash

Альтернатива:

git stash save

Сохранение текущего состояния изменений в отслеживаемых файлах

git stash -k

Альтернатива:

git stash --keep-index
git stash save --keep-index

Сохранение текущего состояния, включая неиспользуемые файлы

git stash -u

Альтернатива:

git stash save -u
git stash save --include-untracked

Сохранение текущего состояния с сообщением

git stash save <message>

Сохранение текущего состояния всех файлов (игнорируются, не отслеживаются и отслеживаются)

git stash -a

Альтернатива:

git stash --all
git stash save --all

Показать список всех данных, сохраненных в тайнике

git stash list

Прятанье без удаления из списка

git stash apply <stash@{n}>

Взять файл из тайника

git checkout <stash@{n}> -- <file_path>

Альтернатива:

git checkout stash@{0} -- <file_path>

Показать все отслеживаемые файлы

git ls-files -t

Показать все неотслеживаемые файлы

git ls-files --others

Показать все проигнорированные файлы

git ls-files --others -i --exclude-standard

Создание нового рабочего дерева из репозитория (git 2.5)

git worktree add -b <branch-name> <path> <start-point>

Отслеживание файлов без удаления

git rm --cached <file_path>

Альтернатива:

git rm --cached -r <directory_path>

Перед удалением ненужных файлов / каталогов, получить список этих файлов / каталогов

git clean -n

Удаление неотслеживаемых файлов

git clean -f

Удаление неотслеживаемого каталога

git clean -f -d

Обновление всех подмодулей

git submodule foreach git pull

Альтернатива:

git submodule update --init --recursive
git submodule update --remote

Показать все коммиты в текущей ветке

git cherry -v master

Альтернатива:

git cherry -v master <branch-to-be-merged>

Переименование ветки

git branch -m <new-branch-name>

Альтернатива:

git branch -m [<old-branch-name>] <new-branch-name>

Архивация ветки master

git archive master --format=zip --output=master.zip

Изменить предыдущий коммит без сообщения об редактировании

git add --all && git commit --amend --no-edit

Удаление ссылок, ссылающихся на удаленные ветки

git fetch -p

Альтернатива:

git remote prune origin

Визуализация дерева версий

git log --pretty=oneline --graph --decorate --all

Альтернатива:

gitk --all

Развертывание вложенной папки git в gh-pages

git subtree push --prefix subfolder_name origin gh-pages

Добавление проекта к репозиторию с использованием поддерева

git subtree add --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Получение последних изменений в репозитории проекта с использованием поддерева

git subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Экспорт истории ветки в файл

git bundle create <file> <branch-name>

Импорт из пакета

git clone repo.bundle <repo-dir> -b <branch-name>

Получение имени текущей ветки

git rev-parse --abbrev-ref HEAD

Игнорировать один файл при коммите

git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog

Запрос по идентификатору в локальную ветку

git fetch origin pull/<id>/head:<branch-name>

Альтернатива:

git pull origin pull/<id>/head:<branch-name>

Показать самую используемую метку в текущей ветке

git describe --tags --abbrev=0

Показать встроенное слово diff

git diff --word-diff

Не учитывать изменения отслеживаемого файла

git update-index --assume-unchanged <file_name>

Отмена без изменений

git update-index --no-assume-unchanged <file_name>

Удаление файлов из .gitignore

git clean -X -f

Восстановление удаленного файла

git checkout <deleting_commit>^ -- <file_path>

Восстановление файлов к определенному коммиту

git checkout <commit-ish> -- <file_path>

Список всех алиасов и конфигов

git config --list

Добавление пользовательских редакторов

git config --global core.editor '$EDITOR'

Автоматическое исправление опечаток

git config --global help.autocorrect 1

Проверьте, является ли изменение частью релиза

git name-rev --name-only <SHA-1>

Помечает ваш коммит, как исправление предыдущего коммита

git commit --fixup <SHA-1>

Пропустить область во время коммита

git commit --only <file_path>

Список игнорируемых файлов

git check-ignore *

Статус игнорируемых файлов

git status --ignored

Список n последних коммитов

git log -<n>

Альтернатива:

git log -n <n>

Открыть все конфликтующие файлы в редакторе

git diff --name-only | uniq | xargs $EDITOR

Мгновенный просмотр рабочего репозитория в gitweb

git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]

Просмотр GPG подписи в журнале коммитов

git log --show-signature

Удаление записи в глобальной конфигурации

git config --global --unset <entry-name>

Создание новой ветки без истории

git checkout --orphan <branch_name>

Извлечь файл из другой ветки

git show <branch_name>:<file_name>

Изменить предыдущие два коммита с интерактивной перестановкой

git rebase --interactive HEAD~2

Список всех веток - WIP

git checkout master && git branch --no-merged

Бинарный поиск ошибок

git bisect start                    
git bisect bad                      
git bisect good v2.6.13-rc2         
git bisect bad                    
git bisect good                     
git bisect reset

Создание списка коммитов и изменений в конкретном файле

git log --follow -p -- <file_path>

Клонировать ветку

git clone -b <branch-name> --single-branch https://github.com/user/repo.git

Создание и редактирование новой ветки

git checkout -b <branch-name>

Альтернатива:

git branch <branch-name> && git checkout <branch-name>

Отключить цветной вывод git в терминал

git config --global color.ui false

Настройки цвета

git config --global <specific command e.g branch, diff> <true, false or always>

Клонировать репозиторий

git clone https://github.com/user/repo.git --depth 1

Поиск коммитов по всем веткам

git log --all --grep='<given-text>'

Получение первого коммита в ветке

git log master..<branch-name> --oneline | tail -1

Показать коммиты по авторам и названию

git shortlog

Количество коммитов в ветке

git rev-list --count <branch-name>

Алиас: git undo

git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'

Добавление примечаний к объекту

git notes add -m 'Note on the previous commit....'

Показать все git-notes

git log --show-notes='*'

Применение коммита из другого репозитория

git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k

Список запрещенных git коммитов

git log --branches --not --remotes

Альтернатива:

git log @{u}..
git cherry -v

Изменить git конфигурацию

git config [--global] --edit

Показать логическую переменную Git

git var -l | <variable>

Узнать название репозитория

git rev-parse --show-toplevel

Показать логи между диапазоном дат

git log --since='FEB 1 2017' --until='FEB 14 2017'

Исключить автора из логов

git log --perl-regexp --author='^((?!excluded-author-regex).*)

Создание сводки ожидающих изменений

git request-pull v1.0 https://git.ko.xz/project master:for-linus

Получение списка ссылок в удаленном репозитории

git ls-remote git://git.kernel.org/pub/scm/git/git.git

Список всех git алиасов

git config -l | grep alias | sed 's/^alias\.//g'

Альтернатива:

git config -l | grep alias | cut -d '.' -f 2

Перенос локальной ветки в удаленный репозиторий

git push -u origin <branch_name>

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Junior IOS разработчик
Москва, от 30000 RUB до 100000 RUB
Программист 1С
по итогам собеседования
Разработчик Python
Москва, от 160000 RUB до 200000 RUB

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ