- Создать каталог для проекта
- Перейти в него
- Инициализировать репозиторий
mkdir GitCheatSheet
cd GitCheatSheet/
git init
- Перейти в каталог с репозиторием
- Удалить каталог
.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
git restore <file>
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 <название ветки>
Чтобы выполнить слияние, нужно перейти в ветку, куда должны добавиться изменения, и вызвать команду
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 - один из служебных файлов папки .git
. Он указывает на коммит, который сделан последним (то есть на самый новый). Внутри HEAD - ссылка на служебный файл: refs/heads/main
, содержащий хеш последнего коммита.
graph LR;
untracked -- git add --> staged\ntracked;
staged\ntracked -- git commit --> tracked;
tracked -- изменения --> modified\ntracked;
modified\ntracked -- git add --> staged\ntracked;
.gitignore
- текстовый файл, где указаны файлы, которые Git будет игнорировать.
Правила из .gitignore
применяются только к новым (untracked) файлам. Если файл уже попал в staging area или в коммит, то правила на него не распространяются.
Шаблоны (правила) - способ указать сразу на несколько файлов.
Синтаксис шаблонов .gitignore
:
#
- комментарий;*
- любая строка, включая пустую;?
- один любой символ;[...]
- любой символ из списка (диапазона), который указан в скобках;/
- слеш указывает на каталоги. Если шаблон в.gitignore
начинается со слеша, то Git проигнорирует файлы или каталоги только в корневой директории, если шаблон заканчивается слешем, то правило применится только к указанной папке;**
- работает также как*
, но отличие в работе с папками:**
может соответствовать любому количеству папок (в т.ч. нулю),*
- только одно папке;!
- инверсия правила.