UNIXAWESOME

Git. Основные команды

#git

git3.png

Git - система контроля версий, используется для ведения истории изменения файлов в вашем проекте. Чаще всего его используют для кода, но можно и для других файлов.

Для начала проверим установлен ли git

1$ git --version

Если ничего не ругнулось и видно версию, то git установлен.

Для установки необходимо скачать и поставить его https://git-scm.com/downloads

Начальная конфигурация git

Делается один раз. Применяется для всех создаваемых проектов глобально. Задаем наше Имя и наш E-mail.

1$ git config --global user.name "username"
2$ git config --global user.email "username@testmail.com"

Создание проекта

После основной конфигурации переходим в папку где будет проект и вводим:

1$ git init

После этого мы можем задать Имя и email, но только это уже будет локально для этого проекта. Если пропустить этот шаг, то будут применяться наши глобальные настройки с нашим Именем и Почтой, которые мы указали выше.

1$ git config user.name "Test user"
2$ git config user.email "test@mail.com"

Создаем файл в директории нашего проекта test.txt.

1$ touch test.txt

Пишем что то в него и добавляем его на индексацию, чтобы git отслеживал изменения в нем.

1$ git add test.txt
2$ git add .    	# Добавляет все измененные файлы в текущей директории
3$ git add *    	# Добавляет все измененные файлы

Для проверки состояния git репозитория.

1$ git status

Добавляем коммит.

1$ git commit -m "my commit"

Опять смотрим статус. Должен быть норм.

История коммитов.

Для просмотра истории коммитов используем.

1$ git log
2$ git log --pretty=oneline                           # Вывод истории в одну строку
3$ git log --pretty=oneline --max-count=3             # Выводит последние 3 коммита
4$ git log --pretty=oneline --all                     # Выводит все коммиты
5$ git log --pretty=oneline --author="Name author"    # Выводит коммиты автора

Также можем задать свой формат вывода коммитов.

Перечисляем через пробел или другой разделитель.

1 %h - короткая верситя хеша, которая тоже будет работать при наших выборках.
2 %s - комментарий коммита
3 %ad - дата создания коммита
4 %an - автор коммита
1$ git log --pretty=format:"s : %ad [ %an ]"

Тоже самое, но с более короткой и красивой датой

1$ git log --pretty=format:"s : %ad [ %an ]" --date=short

Вернуть изменения до предыдущего любого коммита. Для этого нам понадобится хеш коммита к которому хотим откатится. Таким образом можна найти на каком этапе кто то что то поломал.

1$ git checkout <commit hash>

Вы можете быстро просмотреть изменения, внесенные в файл, используя команду diff:

1$ git diff <filename>

или

1$ git diff <commit hash> <filename>

Затем, чтобы вернуть конкретный файл этому фиксатору, используйте команду reset:

1$ git reset <commit hash> <filename>

Для того чтобы вернутся назад к последнему коммиту:

1$ git checkout master

Отмена индексации

Для файла или файлов. Если передумали их коммитить.

1$ git reset HEAD <filename>

Кроме отмены индексации можно отменить изменения в файле до предыдущего коммита.

1$ git checkout <filename>

Удаление последнего коммита.

Сделать это можно с помощью нового пустого коммита.

1$ git revert HEAD --no-edit

Создание веток

Для создания дополнительной ветки в репозитории.

1$ git checkout -b <branch name>

Просмотр всех веток:

1$ git branch

Cимвол *, указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает HEAD).

Слияние веток

Например у нас есть ветка dev, и мы хотим из неё слить изменения в ветку master. Для этого переходим в ветку, в которую хотим сливать изменения.

1$ git checkout master
2$ git merge dev

Если есть конфликты при слиянии веток, решаем конфликт и делаем коммит командой:

1$ git commit

Удаление веток

Удаляет локальную ветку, если уже сделан её пуш и мердж:

1$ git branch -d <branch name>

Принудительно (force) удаляет локальную ветку, несмотря ни на что:

1$ git branch -D <branch name>

Теперь удалим такую же ветку из самого репозитория:

1$ git push origin --delete stage

Удаление всех локальных веток, если не существует удаленных (были удалены):

1$ git fetch --all --prune
2$ git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d

rebase

Например если мы работаем в ветке dev и нам нужно подтянуть новый функционал с ветки master. Можна использовать команду merge, но лучше rebase. Переходим в ветку master и делаем:

1$ git rebase dev

Лучше его использовать только для себя, в своей ветке. Чтобы не нарушить работу других разработчиков. Для веток где работают несколько разработчиков лучше merge.

Удалённый репозиторий

Добавить наш существующий локальный проект на сервер.

1$ git remote add origin https://github.com/username/test-repo.git

или

1$ git remote add origin ssh://git@github.com/username/test-repo.git

Если добавили неправильную ссылку, то удалить командой:

1$ git remote remove origin

Дальше для отправки на удаленный репозиторий используем команду

1$ git push -u origin master

Для последующих отправок кода на удаленный сервер достаточно будет просто выполнить:

1$ git push

По умолчанию отправляется ветка master. Для того чтобы запушить другую ветку нужно выполнить:

1$ git push origin <branch name>

Чтобы подтянуть изменения с удаленного репозитория в локальный нужно воспользоватся командой:

1$ git pull origin <branch name>

Бывает что нужно подтянуть изменения с удаленного репозитория себе локально, но есть незакоммиченые локальные правки. Для этого есть команда stash. Которая позволяет скрыть локальные не коммиченые изменения.

1$ git stash

Дальше подтягиваем удаленные изменения.

1$ git pull --rebase origin master

И потом опять достаем скрытые локальные изменения.

1$ git stash pop

stash позволяет скрывать более одного набора изменений. Можно просмотреть список скрытых изменений в корзине.

1$ git stash list

Для просмотра последнего изменения добавленого в корзину выполнить:

1$ git stash show

Для применения последнего изменения добавленого в корзину:

1$ git stash apply

После этого нужно удалить из корзины изменение:

1$ git stash drop

Или просто можно выполнить, для применения и удаления из корзины:

1$ git stash pop

Для очистки всей корзины изменений:

1$ git stash clear

Подмодули. Submodules

Для добавления используется комманда:

1$ git submodule add

1$ git submodule add https://github.com/chaconinc/DbConnector

Создание тегов.

Теги бывают двух видов: лёгкие и с анотацией. Легкие По умолчанию <коммит> указывает на HEAD, можно указать например v1.0.0. Привязка идёт к коммиту. Метка.

1$ git tag <имя_тега> <коммит>

Для просмотра списка тегов

1$ git tag

Для удаления тегов

1$ git tag -d <имя тега>

С анотацией Не просто метка, а тег с привязанным к нему сообщением.

1$ git tag -a -m <описание тега> <имя_тега> <коммит>

Просмотр тега

1$ git show <имя_тега>

Git  — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.

Reply to this post by email ↪