Первоначальная настройка
git config --global -lконфиг: показать настройки
git config --global credential.helper wincredконфиг: указать где хранить пароли (для windows)
git config --global user.name meконфиг: указать ваше имя для будущих коммитов
git config --global user.email me@gmail.comконфиг: указать ваш email для будущих коммитов
git config --global color.ui trueконфиг: включить раскрашивание
git config --global color.diff trueконфиг: включить раскрашивание
git config --global color.grep trueконфиг: включить раскрашивание
git config --global color.status trueконфиг: включить раскрашивание
git config --global core.autocrlf inputконфиг: форсировать LF окончания строк
git config --global core.safecrlf falseконфиг: форсировать LF окончания строк
git config --global core.quotepath falseконфиг: отображать unicode названия файлов без экранирования
git config --global core.editor = notepadконфиг: указать редактор по умолчанию (для указания комментариев к коммитам и т.п.)
git config --global push.default currentконфиг: выполнять пуши всегда в одноименную ветку
git config --global branch.autosetupmerge alwaysконфиг: автоматически устанавливать трекинг ветки при чекауте
git config --global branch.autosetuprebase alwaysконфиг: выполнять rebase вместо merge во время pull
Начало работы
git initсоздать локальный репозиторий в текущей папке
git clone [url]скачать удаленный репозиторий
Базовые операции
git status -sпоказать состояние (что менялось в индексе и рабочей директории)
git add .добавить все изменения в индекс
git commit -m "comment"выполнить коммит
git commit –allow-empty -m "empty commit"выполнить коммит, даже если ничего не было изменено
Работа с ветками
cat .git/HEADпоказать на что указывает HEAD
git branch -aпоказать список веток
git branch -a -vпоказать список веток с комментарием из последнего коммита
git branch [new-name]создать новую ветку на основе текущей
git branch [new-name] [old-name]создать новую ветку на основе указанной (например, на основе origin/branch-name)
git branch -b [new-name]создать новую ветку на основе текущей и переключиться на нее
git branch -b [new-name] [old-name]создать новую ветку на основе указанной и переключиться на нее
git checkout [name]переключиться на ветку (фактически направить HEAD на указанную ветку)
git cherry -v [name]показать коммиты в текущей ветке, которых нет в указанной
git cherry -v HEAD [name]показать коммиты в указанной ветке, которых нет в текущей
git cherry -v [name] | wc -lпосчитать коммиты в текущей ветке, которых нет в указанной
git merge [name]смержить в текущую ветку коммиты из указанной ветки (например, из origin/branch-name)
git branch -d [name]удалить локальную ветку
Изменение истории, чистка
git rebase [name]переписать коммиты текущей ветки после коммитов в указанной ветке
git commit --amend -m "new comment"добавить изменения в последний коммит (опция --no-edit если не надо менять комментарий)
git checkout -- .откатить непроиндексированные изменения в рабочей директории
git reset -- .откатить индексацию изменений, оставив их в рабочей директории (git add . наоборот)
git reset HEADудалить из текущей ветки все коммиты после указанного, оставив все изменения в рабочей директории
git reset HEAD~1 && git add . && git commit -m 'new comment'изменить последний коммит
git reset HEAD~2 && git add . && git commit -m 'new comment'склеить два последних коммита в один
git reset --hard HEADудалить из текущей ветки ВСЕ изменения после указанного коммита, затерев рабочую директорию
git clean -fd -- .удалить из рабочей директории untracked файлы
Теги
git tagпоказать список локальных тегов
git tag -n3показать список локальных тегов, включая не больше трех строк комментариев
git tag -l v1.*показать список локальных тегов, подходящих под шаблон
git tag [name]пометить тегом текущий HEAD
git tag [name] -m "comment"пометить тегом текущий HEAD вместе с комментарием
git tag [name] some-commit-hashпометить тегом определенный коммит
git tag -d [name]удалить локальный тег
Синхронизация репозиториев
git ls-remote [url]показать, что есть в удаленном репозитории (ветки, теги, пулл-реквесты)
git ls-remote originпоказать, что есть в origin репозитории
git remote -vпоказать привязанные удаленные репозитории
git remote add origin [url]добавить указанный репозиторий под именем origin
git remote show originпоказать инфу об origin репозитории
git fetch origin --pruneскачать origin репозиторий, не применяя к локальным веткам (в .git/refs/remotes/origin)
git fetch origin pull/[pull-request-id]/head:[local-branch-name]скачать pull request в локальную ветку
git pull origin [name]= fetch origin + merge origin/[branch-name]
git pull origin [name] --rebase= fetch origin + merge origin/[branch-name] + rebase (т.е. избегаем merge коммита)
git push origin [name]запушить ветку или тег
git push origin :[name]удалить ветку или тег в origin репозитории (локальная ветка останется, если есть)
git push origin :refs/tags/[tag-name]удалить тег в origin репозитории (вариант без путаницы с ветками)
git push origin --follow-tagsзапушить теги с комментариями
git branch -u origin/[name]привязать текущую локальную ветку к ветке в origin репозитории
git branch --unset-upstreamотвязать текущую локальную ветку от ветки в origin репозитории
Логи
git log --onelineпоказать всю историю коммитов
git log --oneline -10показать последние 10 коммитов
git log --graph --date iso --pretty=format:"%H [%cd] %an: '%s'"показать всю историю коммитов (хэш коммита, дата, автор, комментарий)
git log --oneline --follow some-fileпоказать историю коммитов для конкретного файла
git diff some-fileпоказать изменения в файле
git blame some-fileпоказать кто/что/когда правил в файле
Разное
git update-index --chmod=+x path/to/file"добавить признак исполняемого файла
git update-index --chmod=-x path/to/fileудалить признак исполняемого файла
Заначки
git stashсделать заначку снимка рабочей директории
git stash listпоказать список заначек
git stash applyприменить последнюю заначку
git stash popприменить последнюю заначку и удалить ее
git stash dropудалить заначку
git stash && git stash pop== git reset -- . ?
todo
git gc

И бонусом несколько небольших алиасов, которыми я часто пользуюсь

git config --global alias.s 'status -s'показать проиндексированные изменения
git config --global alias.d "diff HEAD"показать незакоммиченные изменения
git config --global alias.a "add --all"проиндексировать все изменения
git config --global alias.r "remote -v"показать remote репозитории
git config --global alias.f "fetch --all --tags --prune"скачать все с remote репозитория
git config --global alias.b "branch"короткий алиас для branch
git config --global alias.co "checkout"короткий алиас для checkout
git config --global alias.br "branch -a"показать все ветки
git config --global alias.nb "checkout -b"создать ветку и переключиться на нее
git config --global alias.ci "commit -m"сделать коммит с комментариев
git config --global alias.unstage "reset HEAD"отменить индексацию изменений
git config --global alias.uncommit "reset --soft HEAD~1"отменить последний коммит, сохранив изменения

и еще несколько для просмотра логов

git config --global alias.l "log --pretty=format:'%C(Yellow)%h%C(auto)%d %C(Cyan)%ae %C(White)(%cr) %C(Green)%s%C(reset)'"
git config --global alias.lol "log --pretty=format:'%C(Yellow)%h%C(auto)%d %C(Cyan)%ae %C(White)(%cr) %C(Green)%s%C(reset)' --graph --name-status"
git config --global alias.unmerged "log --oneline --graph --name-status --decorate ^HEAD"