Блог Сергея
Пишу о программировании, книгах, видеокурсах.

Шпаргалка по Git

Установка git в ubuntu:
sudo apt install git

Если у вас mac или windows, посмотрите как установить git здесь

Первоначальная настройка Git

Имя пользователя

$ git config --global user.name "firstname lastname"
$ git config --global user.email yourname@example.com

Выбор редактора

$ git config --global core.editor emacs

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

$ git config --list

Git автоматически раскрасит большую часть своего вывода, если вы его об этом попросите.

$ git config --global color.ui true

Если вам нужна помощь при использовании Git’а, есть три способа открыть страницу руководства по любой команде Git’а:

$ git help <команда>
$ git <команда> --help
$ man git-<команда>
Создание репозитория в существующем каталоге

Если вы собираетесь начать использовать Git для существующего проекта, то вам необходимо перейти в проектный каталог и в командной строке ввести

$ git init

Если вы хотите добавить под версионный контроль существующие файлы (в отличие от пустого каталога), вам стоит проиндексировать эти файлы и осуществить первую фиксацию изменений. Осуществить это вы можете с помощью нескольких команд git add указывающих индексируемые файлы, а затем commit:

$ git add *.c
$ git add README
$ git commit -m 'initial project version'
Клонирование репозитория осуществляется командой
$ git clone [url]

Основной инструмент, используемый для определения, какие файлы в каком состоянии находятся — это команда

$ git status

Зачастую, у вас имеется группа файлов, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам.

Если результат работы команды git status недостаточно информативен для вас — вам хочется знать, что конкретно поменялось, а не только какие файлы были изменены — вы можете использовать команду

$ git diff

Удаление файлов Для того чтобы удалить файл из Git’а, вам необходимо удалить его из отслеживаемых файлов (точнее, удалить его из вашего индекса) а затем выполнить коммит. Это позволяет сделать команда

$ git rm

git rm также удаляет файл из вашего рабочего каталога, так что вы в следующий раз не увидите его как “неотслеживаемый”.

Просмотр истории коммитов После того как вы создадите несколько коммитов, или же вы склонируете репозиторий с уже существующей историей коммитов, вы, вероятно, захотите оглянуться назад и узнать, что же происходило с этим репозиторием. Наиболее простой и в то же время мощный инструмент для этого — команда

$ git log

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

$ git show 01d2c977bfe6a99f8e1e92e8ab4cb5c0ead8dd0c

Идентификатор коммита можно сократить до 7 символов.

$ git show 01d2c97
Изменение последнего коммита

Одна из типичных отмен происходит тогда, когда вы делаете коммит слишком рано, забыв добавить какие-то файлы, или напутали с комментарием к коммиту. Если вам хотелось бы сделать этот коммит ещё раз, вы можете выполнить commit с опцией –amend:

$ git commit --amend
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

Все три команды вместе дают один коммит — второй коммит заменяет результат первого.

Можно использовать **git reset HEAD <файл>...** для исключения из индекса.

Когда вы хотите поделиться своими наработками, вам необходимо отправить (push) их в главный репозиторий. Команда для этого действия простая: git push [удал. сервер] [ветка].

$ git push origin master
Псевдонимы в Git

Git не будет пытаться сделать вывод о том, какую команду вы хотели ввести, если вы ввели её не полностью. Если вы не хотите печатать каждую команду для Git’а целиком, вы легко можете настроить псевдонимы (alias) для любой команды с помощью git config. Вот несколько примеров псевдонимов, которые вы, возможно, захотите задать:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

Мы научились добавлять файлы в индекс, но что делать если мы наоборот хотим их удалить из него? Для этого нам помогут две команды: reset и checkout.

git reset path/to/file переводит файл из состояния staged в modified
git checkout path/to/file переводит файл из состояния modified в unmodified, то есть по сути эта команда сбрасывает изменения.

Хорошая практика с git подразумевает отсутствие мерж коммитов при скачивании изменений в локальный репозиторий, поэтому использовать git pull не рекомендуется. Чтобы история была прямой, нужно использовать rebase, например, так

$ git pull --rebase
Ветвление в Git

git status и git branch сообщат нам в какой ветке мы находимся. Создание новой ветки и переключение на нее осуществляется так:

git checkout -b new-branch-name

С помощью git checkout мы можем переключаться между ветками и коммитами.

Слияние веток осуществляется командой git merge. Команда git merge выполняется из той ветки, в которую мы сливаем изменения, а аргументом передается имя той ветки, которую мы сливаем.

$ git checkout master
$ git merge new-feature
Полезные ссылки
  1. Gitless - a simple version control system built on top of Git
  2. Legit is a complementary command-line interface for Git, optimized for workflow simplicity
  3. Курс от хекслета - системы контроля версий (GIT)
  4. Книга Pro Git, авторы Scott Chacon и Ben Straub
  5. Туториал от Гитхаба
  6. Learn Git Branching
  7. GUI Clients
  8. Flight rules for git
  9. Как склеить коммиты и зачем это нужно
  10. How to use Tig to browse Git logs
  11. Keep your commits “atomic”
  12. Gitflow Workflow