AlekseiBogachev / GitCheatSheet

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Команды Git на примере GitCheatSheet

Создать репозиторий

  1. Создать каталог для проекта
  2. Перейти в него
  3. Инициализировать репозиторий
mkdir GitCheatSheet
cd GitCheatSheet/
git init

Удалить репозиторий

  1. Перейти в каталог с репозиторием
  2. Удалить каталог .git
cd GitCheatSheet
rm -rf .git

Проверить состояние репозитория

git status

git status не выводит информацию об игнорируемых файлах. Чтобы отобразить все игнорируемые файлы, нужно использовать следующее:

git status --ignored

Подготовить файлы к сохранению

git add file_name.txt # подготовить к сохранению 1 файл
git add file1.txt file2.txt # подготовить к сохранению несколько файлов
git add --all # подготовить к сохранению все файлы в репозитории
git add . # подготовить к сохранению всю текущую папку

Выполнить коммит

git commit # будет открыт текстовый редактор, для ввода комментария к коммиту
git commit -m 'Мой первый коммит!' # коммит с комментарием, введённым из командной строки

Вывести историю коммитов

git log

git log выводит коммиты в обратном хронологическом порядке - последние коммиты оказываются первыми сверху

Следующая команда выводит историю коммитов в сокращённом формате:

git log --oneline

Следующая команда заставит Git нарисовать ветки с помощью "палочек" и "звёздочек":

git log --graph

или

git log --graph --oneline

Изменть последний коммит

git commit --amend

Чтобы изменить содержимое коммита без изменения сообщения:

git commit --amend --no-edit

Чтобы изменить только сообщение:

git commit --amend -m 'новый текст сообщения'

Клонирование удалённого репозитория

git clone <адрес_репозитория>

После клонирования репозитория не требуется связывание удалённого и локального репозитория, а также выполнение команды git push -u origin main или других комадн, связывающих ветви main в удалённом и локальном репозитории.

Связать удалённый и локальный репозиторий

В каталоге с репозиторием выполнить

git remote add origin <адрес_репозитория> 

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

git push -u origin main

Проверить, что удалённый и локальный репозитории связаны

git remote -v

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

git push

Чтобы отправить новую ветку в удалённый репозиторий, нужно выполнить

git push -u origin <имя_новой_ветки>

Необязательно переходить в ветку, чтобы запушить её.

Получить изменения из удалённого репозитория

git pull

"Откатить" изменения, которые не попали ни в staging, ни в коммит

git restore <file>

Убрать файл из staging area

git restore --staged <file>

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

git restore --staged .

"Откатить" коммит и удалить последующие

git reset --hard <commit hash>

Проверить изменения в файлах

Для файлов, недобавленных в staging area:

git diff

Для файлов, добавленных в staging area:

git diff --staged

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

git diff <хеш коммита 1> <хеш коммита 2>

Сравнить ветки

git diff <название_ветки1> <название_ветки2>

Ветки

Чтобы посмотреть какие в проекте есть ветки и в какой из них мы сейчас находимся:

git branch

Чтобы добавить ветку использовать

git branch <имя ветки>

Чтобы переключиться на другую ветку

git checkout <имя ветки>

Создать ветку и сразу переключиться на неё

git checkout -b <название ветки>

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

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

git merge <название ветки для слияния>

Чтобы запретить слияние в режиме fast-forward, использовать

# --no-edit отключает ввод сообщения для merge-коммита
# --no-ff отключает fast-forward слияние веток

git merge --no-edit --no-ff <название ветки для слияния>

Чтобы отключить fast-forward "навсегда", нужно изменить настройку merge.ff:

git config [--global] merge.ff false

Удалить ветку после объединения

Следующая команда удалит ветку в любом случае

git branch -D <название ветки>

Более безопасный вариант (удалит ветку, только если она была полностью объединена с другой)

git branch -d <название ветки>

Удаление локальной ветки через Git не удаляет ветку на GitHub!

Хеш

Хеш - основной идентификатор коммита.

Хеш - это результат обработки информации о коммите (когда был сделан коммит, содержимое файлов в репозитории на момент коммита и ссылка на предыдущий коммит) алгоритмом вычисляющим хеш-функцию (функцию свёртки).

Обычно хеш - это короткая строка (длина зависит от алгоритма хеширования), состоящая из цифр (0-9) и латинских букв (A-F). Хеш обладает следующими свойствами:

  • если хеш получить дважды для одного и того же набора входных данных, то результат будет гарантированно одинаковый;
  • если в исходных данных поменяется бы один символ, то хеш тоже изменится (сильно).

HEAD

Файл HEAD - один из служебных файлов папки .git. Он указывает на коммит, который сделан последним (то есть на самый новый). Внутри HEAD - ссылка на служебный файл: refs/heads/main, содержащий хеш последнего коммита.

Жизненный цикл файла в Git

graph LR;
  untracked       -- git add --> staged\ntracked;
  staged\ntracked -- git commit --> tracked;
  tracked -- изменения --> modified\ntracked;
  modified\ntracked -- git add --> staged\ntracked;
Loading

Файл .gitignore

.gitignore - текстовый файл, где указаны файлы, которые Git будет игнорировать.

Правила из .gitignore применяются только к новым (untracked) файлам. Если файл уже попал в staging area или в коммит, то правила на него не распространяются.

Шаблоны (правила) - способ указать сразу на несколько файлов. Синтаксис шаблонов .gitignore:

  • # - комментарий;
  • * - любая строка, включая пустую;
  • ? - один любой символ;
  • [...] - любой символ из списка (диапазона), который указан в скобках;
  • / - слеш указывает на каталоги. Если шаблон в .gitignore начинается со слеша, то Git проигнорирует файлы или каталоги только в корневой директории, если шаблон заканчивается слешем, то правило применится только к указанной папке;
  • ** - работает также как *, но отличие в работе с папками: ** может соответствовать любому количеству папок (в т.ч. нулю), * - только одно папке;
  • ! - инверсия правила.

About

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