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

Честно украл у Насти. Выложу тут для начинающих и себе, чтоб не запамятовать.

Начальные установки:

установка имени пользователя:

git config --global user.name "Admin Adminkovi4"

установка емэйла пользователя:

git config --global user.email "admin@mailinator.com"

инициализация гита:

git init

Общие команды:

просмотр в указанном файле построчно: кто и когда последний менял каждую строчку кода (короткий формат даты):

git blame index.html --date short

показать хэлп указанной команды, в данном случае config:

git help config

показать логи:

git log

показать статус:

git status

показать изи текущим состоянием:

git diff HEAD~5

показать изменения между коммитами от sha1 до sha2:

git diff sha1..sha2

показать изменения между коммитами на master и на ветке bird:

git diff master bird

отменяет изменения в указанном файле (восстаналивает файл из индекса):

git check­out -- cats.html

При этом команда git check­out cats.html работает так:

если есть ветка с именем cats.html, то произойдет переключение на эту ветку. Для того, чтобы этого не произошло можно сделать git checkout -- cats.html, тогда гит будет точно знать, что нужно восстановить файл, а не переключиться на ветку.

Кроме того файл можно восстанавливать не только с текущего индекса, а, например, так:

git checkout master~2 cats.html

тогда cats.html будет взят из версии мастера на 2 коммита раньше.

Работа с коммитами:

Аналог

git add .

(добавить все измененомиту и меняет сообщение на новое (хак, который нужно аккуратно использовать):

git commit --amend -m "Comment"

удаляет последний коммит, а изменения остаются незакоммиченные:

git reset --soft HEAD^

удаляет последний коммит и все изменения в нем:

git reset --hard HEAD^

аналогично:

удаляет два последних коммита и все изменения:

git reset --hard HEAD^^

удаляет два последние 5 коммитов и все изменения:

git reset --hard HEAD~5

-u пишется в первый раз, чтобы потом запомнить позицию и можно было писать просто git push:

git push -u origin master

Работа с удаленным сервером и удаленными ветками:

создание нового удаленого сервера с именем origin:

git remote add origin http://github.com/blabla.git

просмотр списка удаленных серверов:

git remote -v

удалить удаленный сервер (масло масляное? \^_\^):

git remote rm origin

показать информацию об удаленном сервере:

git remote show origin

удаляет локальные ветки, которых больше нет на удаленном сервере:

git remote prune origin

показывает список всех удаленных веток:

git branch -r

удаляет удаленную ветку name_branch:

git push origin :name_branch

Теги:

добавляет новый тег с именем v0.0.3:

git tag -a v0.0.3 -m "version 0.0.3"

пушит новый тег:

git push --tags

Конфигурация и логирование:

раскрашивает логи =):

git config --global color.ui true

выводит логи в сокращенно одну строчку:

git config --pretty=oneline

вывод логов в указанном формате, где:
%ad - author date
%an - author name
%h - SHA hash
%s - subject
%d - ref names

git log --pretty=format:"%h %ad- %s [%an]"

вывод логов с выводом измененных строчек:

git log --oneline -p

вывод логов с выводом статистики изменений:

git log --oneline --stat

вывод логов в виде графического дерева коммитов:

git log --oneline --graph

вывод всех логов до указанной даты:

git log --until=1.minute.ago

вывод логов начиная с указанной даты:

git log --since-1.day.ago

вывод логов во временном промежутке:

git log --since=2012.01.01 --until=2013.12.31

гит перестает следить за указанным файлом и удаляет его из гита, но не локально:

git rm --cached development.log

посмотреть список конфигураций:

git config --list

использовать emacs в качестве интерактивных команд:

git config --global core.editor emacs

использовать opendiff для мержа конфликтов (работает только в OS X)

git config --global merge.tool opendiff

Алиасы:

задание алиаса для лог формата:

git config --global alias.mylog

"log --pretty=format:'%h %s [%an]' --graph"

создание сокращения, отныне git st аналогичен команде git status:

git config --global alias.st status


Comments !