# Начало работы с GIT

При выполнении задания можно руководствоваться официальным учебником:

[Pro Git book](https://git-scm.com/book/ru/v2)

1. Установите GIT на свой компьютер: http://git-scm.ru/

2. Запустите GIT в консоли и создайте новый репозиторий:

    ```
    git init
    ```

3. Задайте имя пользователя для текущего проекта:

    ```
    git config --local user.name "John Doe"
    git config --local user.email johndoe@example.com
    ```

4. Создайте файлы, необходимые для проекта.

5. Просмотрите состояние изменений:

    ```
    git status
    ```

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

    ```
    git checkout -- file_0.html
    ```

6. Добавьте файлы в индекс:

    ```
    git add file_a.html
    git add file_b.html
    git add file_c.html
    ...
    git add file_z.html
    ```

    Можно добавить сразу все измененные в проекте файлы с помощью команды:

    ```
    git add -A
    ```

    Но следует быть предельно осторожным.

    После добавления файлов, проверьте состояние:

    ```
    git status
    ```

    Если все хорошо, то можно продолжить.

    Если же заметили новые файлы, которые не должны были попасть в репозиторий, то их необходимо отменить:

    ```
    git rm --cached file_x.html
    ```

    Если были изменены файлы, которые сейчас не нужно проталкивать в репозиторий:

    ```
    git reset HEAD file_n.html
    ```


7. Создайте новый коммит из измененных файлов:

    ```
    git commit -m "commit description"
    ```

    Вместо *commit description* необходимо дать осмысленное описание вашего коммита.


8. Создайте новый репозиторий на одном из хостингов репозиториев:

    - [GitHub](https://github.com/)
    - [BitBucket](https://bitbucket.org/)
    - [GitLab](https://gitlab.com/)
    - [GIT Forlabs](https://git.hostfl.ru/)

9. Добавьте удаленный репозиторий в ваш локальный:

    ```
    git remote add origin https://git.hostfl.ru/alshabalin/first.git
    ```

    Вместо `https://git.hostfl.ru/alshabalin/first.git` необходимо указать URL вашего репозитория.

10. Отправьте ваши изменеия в удаленный репозиторий:

    ```
    git push -u origin master
    ```

    Обратите внимание, что для первой отправки необходимо указать ветку на удаленном репозитории.

    В последующем отправить коммит в удаленный репозиторий можно будет командой `git push`.

11. Удостоверьтесь, что ваши файлы сохранены в удаленном репозитории.

12. Добавьте файлы в свой проект и/или измените несколько существующих файлов.

13. Отправьте изменения в удаленный репозиторий.

14. Пометьте текущий коммит как первую версию вашего проекта:

    ```
    git tag v1.0
    ```

    Команда создает новую метку (тег) с именем `v1.0`.

15. Отправьте созданную метку на сервер:

    ```
    git push origin v1.0
    ```

16. Создайте новую ветку в своем проекте:

    ```
    git branch test1
    ```

    `test1` - это имя вашей ветки.


    Проверьте список ваших текущий веток:

    ```
    git branch
    ```

    Затем переключитесь на новую ветку:

    ```
    git checkout test1
    ```

    Можно сразу создать новую ветку и переключиться на нее:

    ```
    git checkout -b test1
    ```

17. Добавьте файлы и/или измените существующие в новой ветке, создайте из них коммит.

18. Отправьте новую ветку в удаленный репозиторий:

    ```
    git push -u origin test1
    ```

    В дальнейшем в новую ветку можно отправлять обычной командой `git push`.

19. Переключитесь на ветку **master**:

    ```
    git checkout master
    ```

20. Измените и/или добавьте несколько файлов в ветке **master**, создайте их них коммит, отправьте в удаленный репозиторий.

21. Вернитесь на ветку **test1**.

22. Измените и/или добавьте несколько файлов в ветке **test1**, создайте их них коммит, отправьте в удаленный репозиторий.

23. Объедините изменения из ветки **test1** в ветку **master**.

    Стоит учесть, что целесообразнее, сначала втянуть изменения из ветки **master** в ветку **test1**, а затем переключиться на ветку **master** и слить с изменениями из ветки **test1**.

    ```
    git merge master

    git push

    git checkout master

    git merge test1

    git push
    ```

    На любом из этапов объединения может возникнуть конфликт, если необходимо уладить.

    Если конфликт разрешается вручную, то необходимо выполнить `git add conflicted_file.html` и сделать коммит.

24. Создайте метку с новой версией `v1.1` и отправьте ее на сервер.

25. Предоставьте доступ к репозиторию пользователю **alshabalin**.