diff --git "a/\320\230\320\275\321\201\321\202\321\200\321\203\320\272\321\206\320\270\321\217_\320\277\320\276_GIT.md" "b/\320\230\320\275\321\201\321\202\321\200\321\203\320\272\321\206\320\270\321\217_\320\277\320\276_GIT.md" new file mode 100644 index 0000000..fcc1dca --- /dev/null +++ "b/\320\230\320\275\321\201\321\202\321\200\321\203\320\272\321\206\320\270\321\217_\320\277\320\276_GIT.md" @@ -0,0 +1,269 @@ +# Инструкция по использованию GIT + +## Начало работы +Для начала работы необходимо установить две программы: +1. GIT: +2. Virtual Studio Code: + +## Настройка **VSC:** +![Логотип VSC](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Visual_Studio_Code_1.35_icon.svg/180px-Visual_Studio_Code_1.35_icon.svg.png) +1. Запустить программу в папке, где планируется вести контроль версий либо выбрать директорию: + +*Файл-Открыть папку...*; + +2. Запустить терминал: *Вид-Терминал* + +## Работа в **GIT**: +![Логотип GIT](https://git-scm.com/images/logo@2x.png) +1. Для работы в **GIT** необходимо единожды ввести своё имя и e-mail, которое в дальнейшем будет использоваться программой: + + git config --global user.name «Ваше имя английскими буквами» +• git config --global user.email ваша почта@example.com + +Ввод комманд делается в терминале **VSC**. + +2. Узнаём версию программы GIT (далее GIT): + +**git --version** + +3. Проводим иннициализацию **GIT**: + +**git init** + +4. Узнаём в каком репозитории находимся и есть ли сохранения commits: + +**git status** + +5. Добавляем файлы, версии у которых хотим контролировать **GIT**: + +**git add fileName.расш** +**git add * ** - добавление всех файлов и папок в родительском и потомковых папках + +6. Сохраняемизменения в файле, добавленном командой **add** +**git commit -m "_комментарий_"** + +7. При дальнейших изменениях в файлах, версии которых мы хотим контролировать необходимо повторять **п.5,6.**. + + +8. Дополнительные команды, необходимые для работы с GIT: + +**git log** - выводит журнал изменений с указанием имён всех сохранений изменений +**git log --graph** - выводит журнал изменений с графическим изображением веток + +**cd _имя папки_** - заходит в папку, расположенную в текущей +**cd ..** - подниается на одну ступень вверх по каталогу + + +**git checkout** (*первые четыре символа имени нужного сохранения изменений*) - загружает нужное нам сохранение + +**git diff** - показывает разницу между текущим состоянием файла и тем, которое в сохранении изменений. +**git diff nameBranch1..nameBranch2** - показывает разницу между файлами в разных ветках + +## Дополнительные команды в **GIT** + +## Конфигурация +**git config --global user.name "[name]"** + + — установить имя, которое будет прикрепляться к коммиту. + + +**git config --global user.email "[email address]"** + + — установить email, который будет прикрепляться к коммиту. + +**git config --global color.ui auto** + + — включить полезную подсветку командной строки. + +**git config --global push.default current** + + — обновлять удаленную ветку с таким же именем, что и локальная, при пуше изменений (если не указано иного). + +**git config --global core.editor [editor]** — установить редактор для редактирования сообщений коммита. + +**git config --global diff.tool [tool]** — установить программу для разрешения конфликтов при слиянии. + +## Создание репозиториев +**git init [project-name]** — создать новый локальный репозиторий с заданным именем. + +**git clone [url]** — загрузить проект и его полную историю изменений. + +## Работа с изменениями +**git status** — полный список изменений файлов, ожидающих коммита. + +**git status -s** — краткий вид изменений. + +**git diff** — показать изменения в файлах, которые еще не были добавлены в индекс коммита (staged). + +**git add [file]** — сделать указанный файл готовым для коммита. + +**git add .** — сделать все измененные файлы готовыми для коммита. + +**git add '*.txt'** — добавить только файлы, соответствующие указанному выражению. + +**git add --patch filename** — позволяет выбрать какие изменения из файла добавятся в коммит. + +**git diff --staged** — показать что было добавленно в индекс с помощью git add, но еще не было закоммиченно. + +**git diff HEAD** — показать что изменилось с последнего коммита. + +**git diff HEAD^** — показать что изменилось с предпоследнего коммита. + +**git diff [branch]** — сравнить текущую ветку с заданной. + +**git difftool -d** — то же самое, что и diff, но показывает изменения в заданной difftool. + +**git difftool -d master..** — показать изменения, сделанные в текущей ветке. + +**git diff --stat** — показать статистику какие файлы были изменены и как. + +**git reset [file]** — убрать файлы из индекса коммита (изменения не теряются). + +**git commit** — записать изменения в репозиторий. для написания сообщения откроется назначенный редактор. + +**git commit -m "[descriptive message]"** — записать изменения с заданным сообщением. + +**git commit --amend** — добавить изменения к последнему коммиту. + + +## Работа с ветками + +**git branch** — список всех локальных веток в текущей директории. + +**git branch [branch-name]** — создать новую ветку. + +**git checkout [branch-name]** — переключиться на указанную ветку и обновить рабочую директорию. + +**git checkout -b /** — переключиться на удаленную ветку. + +**git checkout [filename]** — вернуть файл в первоначальное состояние если он еще не был добавлен в индекс коммита. + +**git merge [branch]** — соединить изменения в текущей ветке с изменениями из заданной. + +**git merge --no-ff [branch]** — соединить ветки без режима “fast forwarding”. + +**git branch -a** — посмотреть полный список локальных и удаленных веток. + +**git branch -d [branch]** — удалить заданную ветку. + +**git branch -D [branch]** — принудительно удалить заданную ветку, игнорируя ошибки. + +**git branch -m ** — переименовать ветку. + + +##Работа с файлами + +**git rm [file]** — удалить файл из рабочей директории и добавить в индекс информацию об удалении. + +**git rm --cached [file]** — удалить файл из репозитория, но сохранить его локально. + +**git mv [file-original] [file-renamed]** — изменить имя файла и добавить в индекс коммита. + +Отслеживание файлов +**.gitignore** — текстовый файл, в котором задаются правила для исключения файлов из репозитория. Например: + +*.log +build/ +temp-* +git ls-files --other --ignored --exclude-standard — список всех игнорируемых файлов. + + +## Сохранение фрагментов + +**git stash** — положить во временное хранилище все отслеживаемые файлы. + +**git stash pop** — восстановить последние файлы, положенные во временное хранилище. + +**git stash list** — список всех сохраненных изменений во временном хранилище. + +**git stash drop** — удалить последние файлы, положенные во временное хранилище. + + +## Просмотр истории + +**git log** — список изменения текущей ветки. + +**git log --follow [file]** — список изменения текущего файла, включая переименования. + +**git log --pretty=format:"%h %s" --graph** — изменение вида отображения истории изменений. + +**git log --author='Name' --after={1.week.ago} --pretty=oneline --abbrev-commit** — посмотреть над чем работал заданный пользователь последнюю неделю. + +**git log --no-merges master..** — посмотреть историю изменений только для текущей ветки. + +**git diff [file-branch]..[second-branch]** — посмотреть различия между двумя заданными ветками. + +**git show [commit]** — показать метадату и изменения в заданном коммите. + +**git show [branch]:[file]** — посмотреть на файл в другой ветке, не переключаясь на неё. + + +## Отмена коммитов + +**git reset** — убрать изменения из индекса коммита, сами изменения останутся. + +**git reset [commit/tag]** — отменить все коммиты после указанного коммита, изменения будут сохранены локально. + +**git reset --hard [commit]** — принудительно вернутся к указанному коммиту, не сохраняя историю и изменения. + + +## Синхронизация изменений + +**git fetch [bookmark]** — загрузить всю историю с заданного удаленного репозитория. + +**git merge [bookmark]/[branch]** — слить изменения локальной ветки и заданной удаленной. + +**git push** — запушить текущую ветку в удаленную ветку. + +**git push [remote] [branch]** — запушить ветку в указанный репозиторий и удаленную ветку. + +**git push [bookmark] :[branch]** — в удаленном репозитории удалить заданную ветку. + +**git push -u origin master** — если удаленная ветка не установлена как отслеживаемая, то сделать ее такой. + +**git pull** — загрузить историю и изменения удаленной ветки и произвести слияние с текущей веткой. + +**git pull [remote][branch]** — указать конкретную удаленную ветку для слияния. + +**git remote** — посмотреть список доступных удаленных репозиториев. + +**git remote -v** — посмотреть детальный список доступных удаленных репозиториев. + +**git remote add [remote][url]** — добавить новый удаленный репозиторий. + +#Работа с удалённым репозиторием +##Загрузка репозитория из Github в Git +1. создать аккаунт на Github.com +2. Создать локальный репозиторий +3. "Подружить" ваш локальный и удалённые репозитории. Github при создании нового репозитория подскажет, как это можно сделать. +4. Отправить (push) ваш локальный репозиторий в удалённый (на Github). При этом вам, возможно, нужно будет авторизоваться на удалённом репозитории. +5. Провести изменения "с другого компьютера". +6. Выкачать (pull) актуальное состаяние из удалённого репозитория. + +##Загрузка из Git (компьютера) в Github (интернет) +1. Создаём на компьютере репозиторий. +2. Создаём аккаунт на Github в интернете. +3. В Github в правом верхнем углу нажимаем "+" -"New repository" - даём имя - тип "Public" - "Creat repository" +4. Есть три варианта создания репозитория: + - Создать новый репозиторий через терминал; + - Привязать существующий репозиторий; + - Импортировать код из другого репозитория. +5. Необходимо ввести комманды, которые предлагает Github для выбранного варианта, в Git. В нашем случае: +-git remote add **origin** _(название репозитория)_ http://... +-git branch -M **main** _(указывает имя главной ветки)_ +-git push -u origin main _(отправка)_ +6. При первой загрузке необходимо авторизироваться. + +##Итерации +1. Вносим изменения в репозиторий в Git на компьютере. +2. Командой **git push" отправляем изменения в Github интернет. +3. Вносим изменения в Github (либо в нём самом редактируем, либо с другого компьютера) +4. Командой **git pull** скачиваем в Git из Github изменения с одновременным слиянием веток. + +## Как сделать **pull request** +1.Делаем **fork** стороннего репозитория (создаётся копия репозитория на нашем аккаунте) +2. Делаем **clone СВОЕЙ** версии репозитория (скачиваем в Git на компьютере из Github своего аккаунта) +3. Создаём новую ветку и в **НЕЁ** вносим свои изменения +4.Фиксируем изменения, делая коммиты. +5. Отправляем свою версию на свой аккаунт Github +6. На сайте Github нажимаем появившуюся кнопку **pull recuest"