Git - распределённая система управления версиями.

Инструкции

Инициализация / init

$ git init $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com

Linux/Unix/Macos

global

$ git config --global core.filemode false

local

$ git config core.filemode false

Windows

global

$ 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

local

$ git config core.filemode false $ git config core.preloadindex true $ git config core.fscache true $ git config gc.auto 256 $ git config 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 clone http://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

Документация

http://githowto.com/ru/undoing_committed_changes

http://uleming.github.io/gitbook/3_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC_%D0%B8_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC.html

Временное хранилище / 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=1 git clone htps://...

GIT_TRACE

Принимает значаения 1, 2 или true

$ GIT_TRACE=2 git 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

Настройка deploy on github

Ошибки

Ошибка: 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://www.youtube.com/playlist?list=PLY4rE9dstrJyTdVJpv7FibSaXB4BHPInb

Документация

Мини документация

Редактирование истории в git

https://git-scm.com/book/ru/v2/ - Pro Git (русский) ver 2

.gitignore файл

Настройка deploy on github

Собственный git-сервер с нуля

Алгоритм работы с git репозиторием

GIT vs HG

Скрипт автоматической загрузки c github

GIT vs HG

.gitignore

http://gitimmersion.ru/

http://git-scm.com/book/ru

http://git-scm.com/book/ru/v1

http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru

gitlab

Сервер

https://about.gitlab.com/ / https://github.com/gitlabhq/gitlabhq

Клиенты

SmartGit

https://github.com/rowanj/gitx

https://www.sourcetreeapp.com/

Code Review

https://code.google.com/p/gerrit/

Ссылки

http://habrahabr.ru/post/174467/

How to link to Git commit

Undoing in Git - Reset, Checkout and Revert

http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/index.html

http://marklodato.github.com/visual-git-guide/index-ru.html

Удачная модель ветвления для Git

Git Workflow

http://blog.nsws.ru/rabota-s-git-dlya-nachinayushhix.html

http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch02.html

http://lezhnevs.ru/git

http://lezhnevs.ru/git/submodule

http://lezhnevs.ru/git/kontrol-bazyi-dannyih-vmeste-s-faylami

http://rogerdudler.github.com/git-guide/index.ru.html

http://programilla.com/blog/siteconstruction/325.html

http://ignar.name/articles/git-create-remote-branch.html

http://blog.sectorit.net/development/430

http://habrahabr.ru/post/75990/

http://jetwalker.blogspot.ru/2012/01/receivedenycurrentbranch.html

http://stackoverflow.com/questions/2816369/git-push-error-remote-rejected-master-master-branch-is-currently-checked

How to update the git fork

Git Rebase: руководство по использованию

Тонкости благополучного git-merge

http://habrahabr.ru/post/157175/

http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch02.html

http://found-notes.blogspot.ru/

https://proglib.io/p/git-cheatsheet/