В статье рассматривается система управления версиями Git. Она не является полным руководством по Git и вряд ли может быть использована в качестве учебника. Скорее это справочник по основным командам.
Для изучения Git с нуля рекомендую прочитать официальное руководство Pro Git (http://git-scm.com/book/ru) или интерактивный русскоязычный тур Git How To (http://githowto.com/ru).
Установка Git
Установка из исходных кодов описана в официальном руководстве Git (http://git-scm.com/book/ru).
Установка в Ubuntu
$ sudo apt-get install git
Установка в Fedora
$ yum install git-core
Установка в OpenSUSE
$ zypper in git-core
Установка в Mac с помощью графического инсталятора Git
http://sourceforge.net/projects/git-osx-installer/
Установка в Mac с помощью MacPorts
$ sudo port install git-core +svn +doc +bash_completion +gitweb
Установка в Windows
http://msysgit.github.com/
Первичная настройка
В состав Git входит утилита git config, которая позволяет просматривать и устанавливать параметры, контролирующие все аспекты работы Git и его внешний вид. Эти параметры могут быть сохранены в трёх местах:
- Файл /etc/gitconfig содержит значения, общие для всех пользователей системы и для всех их репозиториев. Если при запуске git config указать параметр --system, то параметры будут читаться и сохраняться именно в этот файл.
- Файл ~/.gitconfig хранит настройки конкретного пользователя. Этот файл используется при указании параметра --global.
- Конфигурационный файл в каталоге Git'а (.git/config) в том репозитории, где вы находитесь в данный момент. Эти параметры действуют только для данного конкретного репозитория. Настройки на каждом следующем уровне подменяют настройки из предыдущих уровней, то есть значения в .git/config перекрывают соответствующие значения в /etc/gitconfig.
В системах семейства Windows Git ищет файл .gitconfig в каталоге $HOME (C:\Documents and Settings\$USER или C:\Users\$USER для большинства пользователей). Кроме того Git ищет файл /etc/gitconfig, но уже относительно корневого каталога MSys, который находится там, куда вы решили установить Git, когда запускали инсталлятор.
Установка имени и электронной почты
Установка имени и адреса электронной почты. Каждый коммит в Git'е содержит эту информацию, и она включена в передаваемые коммиты и не может быть далее изменена:
git config --global user.name "Your Name" git config --global user.email "your_email@whatever.com"
Параметры установки окончаний строк
Также, для пользователей Unix/Mac:
git config --global core.autocrlf input git config --global core.safecrlf true
Выбор редактора
По умолчанию Git использует стандартный редактор, установленный в системе. Для выбора другого редактора необходимо выполнить команду:
$ git config --global core.editor emacs
Утилита сравнения
По умолчанию Git использует стандартную утилиту сравнения, для её смены необходимо выполнить команду:
$ git config --global merge.tool vimdiff
Просмотр настроек
Просмотр всех настроек выполняется командой git config --list:
$ git config --list user.name=Scott Chacon user.email=schacon@gmail.com color.status=auto color.branch=auto color.interactive=auto color.diff=auto ...
Также вы можете проверить значение конкретного ключа, выполнив git config {ключ}:
$ git config user.name Scott Chacon
Псевдонимы в Git
Можно настроить псевдонимы (alias) для любой команды с помощью git config.
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status
Это означает, что, например, вместо набирания git commit, вам достаточно набрать только git ci.
Основные команды
Получение справки
$ git help <команда> $ git <команда> --help $ man git-<команда>
Создание репозитория в существующем каталоге
$ git init
Клонирование существующего репозитория
$ git clone <адрес репозитория>
Например:
$ git clone git://github.com/schacon/grit.git
Клонирование в другой каталог осуществляется командой:
$ git clone git://github.com/schacon/grit.git <имя другого каталога>
Определение состояния файлов
$ git status
Отслеживание новых файлов
$ git add <имя файла>
Игнорирование файлов
Настройки игнорирования файлов, которые не должны обрабатываться git, находятся в файле .gitignore: в корне репозитория. Пример файла .gitignore:
# комментарий — эта строка игнорируется # не обрабатывать файлы, имя которых заканчивается на .a *.a # НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила !lib.a # игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO /TODO # игнорировать все файлы в каталоге build/ build/ # игнорировать doc/notes.txt, но не doc/server/arch.txt doc/*.txt # игнорировать все .txt файлы в каталоге doc/ doc/**/*.txt
Просмотр индексированных и неиндексированных изменений
Для просмотра непроиндексированных изменений:
$ git diff
Для просмотра проиндексированных изменений, которые войдут в следующий коммит:
git diff --cached
Для просмотра изменений в отдельном файле:
git diff <имя файла>
Фиксация изменений
$ git commit -m "Комментарий"
Внимание!
Изменения, для которых не выполнена команда git add не будут зафиксированы.
Игнорирование индексации
Добавление параметра -a в команду git commit заставляет Git автоматически индексировать каждый уже отслеживаемый на момент коммита файл, позволяя вам обойтись без git add:
git commit -a -m "Комментарий"
Удаление файлов
Полное удаление файла и из под наблюдения Git и с жесткого диска:
git rm <имя файла>
Если файл был изменён и уже проиндексирован, необходимо использовать принудительное удаление с помощью параметра -f.
Удаление файла и из под наблюдения Git, но с жесткого диска:
git rm --cached <имя файла>
Перемещение файлов
$ git mv <имя файла> <новое имя файла>
Эквивалентно выполнению следующих команд:
$ mv <имя файла> <новое имя файла> $ git rm <имя файла> $ git add <новое имя файла>
Просмотр истории коммитов
По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке. То есть самые последние коммиты показываются первыми.
git log
Вывод в собственном формате:
git log --pretty=format:"%h - %an, %ar : %s"
Команда log содержит много других дополнительных параметров. Подробнее о них написано в официальном руководстве Git (http://git-scm.com/book/ru).
Изменение последнего коммита
git commit --amend
Отмена индексации файла
git reset HEAD <имя файла>
Отмена изменений файла
git checkout -- <имя файла>
Просмотр меток (тегов)
$ git tag
Поиск меток(тегов) по шаблону:
$ git tag -l 'v1.4.2.*'
Создание легковесных меток(тегов)
git tag <метка>
Создание аннотированных меток(тегов)
git tag -a <метка> -m '<комментарий>'
Выставление меток(тегов) позже
Также возможно помечать уже пройденные коммиты. Предположим, что история коммитов выглядит следующим образом:
$ git log --pretty=oneline 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
Для отметки коммита укажите его контрольную сумму (или её часть) в конце команды:
$ git tag -a v1.2 -m 'version 1.2' 9fceb02
Обмен метками(тегами)
По умолчанию, команда git push не отправляет метки на удалённые серверы. Необходимо явно отправить (push) метки на общий сервер после того, как они были созданы. Это делается так же, как и выкладывание в совместное пользование удалённых веток — нужно выполнить `git push origin [имя метки].
Чтобы отправить все метки за один раз, нужно использовать опцию --tags:
$ git push origin --tags
Удаление меток(тегов)
git tag -d <имя метки>
Отображение удалённых репозиториев
$ git remote -v
Добавление удалённых репозиториев
$ remote add [сокращение] [url]:
Извлечение данных из удаленного репозитория
Без слияния:
$ git fetch [имя удал. сервера]
Со слиянием:
$ git pull [имя удал. сервера]
Отправка данных в удаленный репозиторий
git push [удал. сервер] [ветка]
Инспекция удалённого репозитория
$ git remote show [удал. сервер]
Удаление и переименование удалённых репозиториев
Переименование:
$ git remote rename <старое имя> <новое имя>
Удаление:
$ git remote rm <имя репозитория>
Создание новой ветки
$ git branch <имя ветки>
Чтобы создать ветку и сразу же перейти на неё, необходимо выполнить команду git checkout с ключом -b:
$ git checkout -b <имя ветки>
Переход на другую ветку
$ git checkout <имя ветки>
Слияние веток
$ git merge <имя ветки>
Удаление ветки
$ git branch -d <имя ветки>
Для удаления не слитых веток необходимо использовать команду с аргументом -D:
$ git branch -D <имя ветки>
Состояние веток
Показать текущую ветку:
$ git branch
Показать последний коммит на каждой из веток:
$ git branch -v
Посмотреть ветки, которые уже слиты с текущей:
$ git branch --merged
Посмотреть ветки, которые ещё не слиты с текущей:
$ git branch --no-merged
Перемещение изменений между ветками
При помощи команды rebase можно взять все изменения, которые попали в коммиты на одной из веток, и повторить их на другой. Для этого сначала надо переместиться на ветку (команда git checkout <имя ветки>), в которую будут переноситься изменения, а затем выполнить команду:
$ git rebase <имя ветки из которой переносятся изменения>
Отслеживание веток
$ git checkout -b [ветка] [удал. сервер]/[ветка]
Для Git версии 1.6.2 или более поздних, можно также воспользоваться сокращением --track:
$ git checkout --track origin/serverfix
Чтобы настроить локальную ветку с именем, отличным от имени удалённой ветки, можно легко использовать первую версию с другим именем локальной ветки:
$ git checkout -b sf origin/serverfix
Удаление веток на удалённом сервере
$ git push [удал. сервер] :[ветка]
Прятанье
$ git stash
Вывести список спрятанного:
$ git stash list stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051... Revert "added file_size" stash@{2}: WIP on master: 21d80a5... added number to log
Применить спрятанное:
$ git stash apply stash@{2}
Создание ветки из спрятанных изменений:
$ git stash branch <имя ветки>
Примечание
В статье описаны основные команды Git. Это далеко не полный перечень его возможностей. Исчерпывающую информацию по работе и настройке Git можно получить в официальном руководстве Pro Git (http://git-scm.com/book/ru).
Основные Git команды. Можно использовать как шпаргалку:
ОтветитьУдалитьРекомендую к прочтению: https://use-web.ru/news.php?id=138&tid=3