# Git

## Git система

Git - распределённая система контроля версий, которая даёт возможность разработчикам возможность отслеживать изменения в файлах и совместно работать с другими людьми. Создана в 2005 году Линусом Торвальдсом

## Github

Github - сервис онлайн хостинга репозиториев.

## Комманды

### Конфигурация

#### Просмотр настроек

```bash
git config --list
```

#### Установка имени и почты

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

### Помощь

```bash
git help # Помощь по всей команде
git help config # Помощь по конкретной команде
```

### Работа с репозиторием

#### Инициализировать пустой репозиторий в текущей папке

```bash
git init 
```

#### Коммиты

```bash
git status #  Посмотреть состояние файлов
git add . # Добавить все файлы в текущей папке
git add -A # Добавить все файлы в текущем репозетории
git commit -m "Сообщение" # Сделать коммит с сообщением
git commit -am "Сообщение" # Сделать коммит со всеми изменёнными файлами (новые файлы не добавляются)
git rm test.txt # Удаляет файл из git и из папки
git rm --cached test.txt # Удаляет файл из git но не из папки
git log # Посмотреть коммиты
git log --pretty=format:"%h - %an, %ar : %s" # Красивенький вывод, но мне не нравится
git log -p # Кроме обычного ещё покажет diff
git log --since=2.weeks # За последние 2 недели
git checkout o9bcdsb text.txt # Возвращает файл к состоянию нужного коммита
```

#### Работа с remote

```bash
git clone https://github.com/torvalds/linux.git # Скопировать репозиторий
git remote add origin https://github.com/torvalds/linux.git # Добавить ссылку к существующему локальному репозеторию
git push # Отправляет ветку
git push -u origin master # master - название ветки. Эта команда нужна только при первой отправке ветки
```
