Git - распределённая система управления версиями.
Инструкции
Инициализация / init
$ git init $ git config--global user.name "John Doe" $ git config--global user.email johndoe@example.com
Windows
$ git config--global core.filemode false $ git config--global core.preloadindex true $ git config--global core.fscache true $ git config--global gc.auto 256 $ git config--global status.submoduleSummary false
Конфигурация
Вывод установленных параметров
$ git config--local-l
Установка параметров
$ git config--local core.filemode true
Актуализация изменений
$ git checkout-- . &&git pull&&git submodule update --init--recursive
Локальное хранилище / stage
- Добавление в индекс
- git add <имя_файла>
- git add *
- git add .
- git add -A - Добавить в индекс только удаленные файлы
- Удаление из индекса
- git rm <имя_файла>
- git rm *.php
- git reset - Отменить индексацию последних изменений
- git rm --cached <ИМЯ_ФАЙЛА> - Удалить из индекса файл и добавить в игнор. Файл останется в каталоге.
- git reset HEAD benchmarks.rb - Отменить индексацию файла benchmarks.rb
Локальный репозиторий
- git clonehttp://site.com/git
- Фиксация изменений
- git commit -m "Описание коммита"
- git checkout <hash-коммита> - Переключиться на определенный коммит
- git commit --amend - Удаление последнего коммита
- Восстановление файлов из репозитория
- git checkout <branch> # Перемещение указателя HEAD на комит или ветку
- git reset --hard HEAD~n # Перемещение указателя HEAD на комит
- git checkout -- <имя_файла> - восстановление файла из репозитория
- git reset --hard origin/master - удалить все локальные изменения и коммиты
- git reset --hard origin/master
- git reset --hard HEAD^ # Сбросить все локальные измеения до текущего состояния
- Перемещение комитов
- git rebase -i HEAD~n # Позволяет переупорядочивать, менять комменты, выборочно удалять и прочее
- Ветвление branch
- git branch bug1Создать ветку bug1
- git branch -d bug1Удалить ветку bug1
- Пересадка веток / rebase
- git rebase master
- git checkout master # переключаемся на бранч master
- git rebase bug1 # пересаживаем историю изменений ветки bug1 в master
- или
- git checkout bug1
- git rebase master
- git checkout master
- git merge bug1 # При этом произойдет fast-forward merge
Отмена коммитов
До комита
- git reset --hard HEAD
После комита
- git reset --hard ORIG_HEAD
Документация
Временное хранилище / Stash
Часто возникает такая ситуация, что пока вы работаете над частью своего проекта, всё находится в беспорядочном состоянии, а вам нужно переключить ветки, чтобы немного поработать над чем-то другим. Подробнее...
Вместо git reset --hard, можно сначала файлы сохранять во временное хранилище, затем применять изменения.
- git stashПоместить файлы во временное хранилище
- git stash applyПрименить последнее изменение из стека / лога к текущей рабочей копии
- git stash dropУдалить последнее изменение в стеке / лога
- git stash listПоказать все изменения в стеке / логе
- git stash showПоказать последнее измененеие в стеке / логе (патч)
- git stash popПрименить последнее изменение из стека к текущей рабочей копии и удалить его из стека
- git stash clearОчистить стек изменений
Удаленный репозиторий / origin
- Синхронизация
- git push origin master
- git remote add origin <адрес_сервера>
Submodule / Субмодули
- git submodule add git@github.com:Mirocow/express-chat.git
- git submodule update –init [express-chat]
- git submodule update --init --recursive - обновить все зависимые модули (репозитории)
- git rm -r yii2-mongodb - Удалить сабмодуль yii2-mongodb
- git rm -r yii2-redactor - Удалить сабмодуль yii2-redactor
- git submodule add -- /to/path/git/dir - Добавить локальный модуль (Необходимо указывать только полный путь до папки)
Как вынести код в отдельный репозитоий
Дано:
- Основной репозиторий app/
- Необходимый код лежит тут app/vendor/mirocow/yii2-redactor
- копируем код в отдельную папку и создаем репозитоий путь-до-репозитория/yii2-redactor
- удаляем если есть уже ранее созданный модуль git rm -rf yii2-redactor
- обязательно переходим в добавляемую папку app/vendor/mirocow
- добавляем модуль как отдельный репозитоий из папки git submodule add -f путь-до-репозитория/yii2-redactor/
Отладка
GIT_CURL_VERBOSE
$ GIT_CURL_VERBOSE=1git clone htps://...
GIT_TRACE
Принимает значаения 1, 2 или true
$ GIT_TRACE=2git clone htps://...
Настройка
- git config color.ui true - использовать цветной вывод в терминале
http://marklodato.github.io/visual-git-guide/index-ru.html?no-svg
Настройка deploy on github
Настройка github для работы с Deploy keys
Ошибки
Ошибка: There is no tracking information for the current branch
При возникновении ошибки вида
$ git pull There is no tracking information for the current branch. Please specify which branch you want to rebase against. See git-pull(1)for details git pull<remote><branch> If you wish to set tracking information for this branch you can do so with: git branch--set-upstream-to=origin/<branch> master
следует выполнить
$ git pull origin master $ git branch--set-upstream-to=origin/master master $ git pull
Видеоуроки
Документация
- https://git-scm.com/book/ru/v2/ - Pro Git (русский) ver 2