Git - это программа, обеспечивающая отслеживание изменений в программе. Один из продуктов VCS (Системы Контроля Версий).
Он позволяет:
- Объединить коды нескольких разработчиков;
- Отслеживать измения в коде и возвращаться к предудыщим вариантам кода;
- Взаимодействовать, скачивать удаленные репозитории и делиться своими (локальными) с помощью Github.
По умолчанию интерфейс Git представляет из себя консоль. Чтобы работать в Git нужно вписывать в терминал команды.
Командная строка принимает их от пользователя, преобразовывает, а после - выполняет.
Коммит - это что-то вроде сохранения изменений с комментарием. В программе он выглядит так: git commit -m "...."
.
После ввода команды git add %...%
, файл добавляется в служебную папку .git
. Вы еще не сохранили изменения. Вы только сделали его отслеживаемым (tracked) для Системы Контроля Версий.
Заключительный шаг за коммитом! При создании для каждого коммита присваивается определенный индефикационный "номер" - хеш. Хеш можно увидеть при вызове команды:
git log
- тогда появится полный хеш;git log --oneline
- (One - "Одна", Line - "Линия") появится сокращенный хеш. Сокращенный хеш также является уникальным, как и полный, и поэтому им можно смело пользоваться.
Если вы знаете хеш, вы можете узнать все остальное: автора, дату коммита и содержимое закоммиченных файлов. Хеши хранятся в папке.git
.
Файл HEAD ("голова", "головной") - один из слежебных файлов папки .git
. Он указывает на коммит, который сделан последним, т.е. на самый новый.
Внутри HEAD - ссылка на служебный файл: refs/heads/master. Если заглянуть в этот файл, то можно увидеть хеш последнего коммита.
-
untracked
("неотслеживаемый")
Это означает, что Git "видит" новый файл в репозитории, но не следит за изменениями в нем. У untracked-файла нет предыдущих версий, зафиксированных с помощьюgit add
или коммитах -
staged
("подготовленный")
После выполнения командыgit add
файл попадает в staging area (stage - "Сцена", area - "область"), т.е. в список файлов, которые войдут в коммит. В этом моменте файл находится в состоянии staged.
Если коммит можно сравнивать со сделанной фотографией, тоgit add
добавляет персонажей на сцену (stage) для общей фотографии -
tracked
("отслеживаемый")
Состояниеtracked
- это полная противоположностьuntracked
. В это состояние попадают файлы, которые уже были зафиксированы с помощьюgit commit
,
а также все файлы, которые были добавлены в staging area командойgit add
. -
modified
("измененный")
Состояниеmodified
означает что Git сравнил содержимое файла с последней сохраненной версией и нашел отличия. Например, файл был закоммичен и после этого изменен.
Команда git add
добавляет в staging area только текущее содержимое файла. Если вы, например, сделаете git add file.txt
, а затем измените file.txt
,
то новое содержимое файла не будет находиться в staging area.
Git сообщит об этом с помощью статуса modofied: файл изменен относительно той версии, которая уже в staging.
Чтобы добавить в staging последнюю версию, нужно выполнить git add file.txt
еще раз.
flowchart TD
A[untracked] -- "git add" ---> B{staged};
B--"git commit"--> C[tracked/comitted];
C--изменения-->D[modified];
B--изменения--> D[modified];
D--"git commit"--> C[tracked/comitted];
-
cd %Имя_директории%
- (Change directory - "Поменять директорию") перемещает в директорию, находящуюся на один уровень ниже или выше. Чтобы перенестись на несколько директорий нужно использовать знак - /
cd ..
- переносит в директорию, стоящую на один уровень выше;
cd ~
- переносит в домашнюю директорию, в директорию пользователся (USER);
cd /c
- переносит в корневую директорию, самую высшую. -
pwd
- (print working directory - "вывести рабочую директорию") выводит в какой папке вы сейчас находитесь; -
ls
- List directory contens - "Отобразить содержимое директории";
ls
с флагом -a выведет расширенный список содержимого (+ скрытые файлы) -
touch %Имя_файла%
- ("коснуться") создает файл с указанным расширением (можно использовать с символами ~ и .. , чтобы создавать файлы в род. и предыдущей директориях соответственно). -
mkdir %Имя_файла%
- (make directory - "создать директорию") создает папку (можно использовать с символами ~ и .. , чтобы создавать файлы в род. и предыдущей директориях соответственно);
Ключ -p позволяет создать сразу структуру директорий. -
cp %Что_копирует% %...% %...% %куда_копирует%
- ( copy - "копировать") копирует файлы и директории сохраняет их в другой папке (можно копировать как один файл, так и сразу несколько) -
Cat %Имя_файла%
- (con__cat__enate and print - "объединить и распечатать") считывает текстовые файлы -
rm %Имя_файла%
- (remove - "удалить") удаляет файл;
rmdir
- удаляет директорию;
rm - r
- (recursive - "рекурсивный") удаляет последовательно каждый элемент в папке.
-
git init
- (от англ. инициализировать) делает из папки git-репозиторий (от англ. repository — «хранилище»), создавая в ней скрытую папку.git
. Она нужна чтобы хранить файлы и позволить VCS взаимодействовать с ними. -
rm -rf .git
- позволяет разгидить папку (если репозиторий был создан по ошибке), удалив из нее скрытую директорию.git
-r
(recursive - "рекурсивно") позволяет удалять папки вместе с их содержимым
-f
(force - "заставить") избавляет вас от вопросов вроде "Вы точно хотите удалить этот файл? А этот? И этот тоже?" -
git status
- если кратко, то выводит следующую информацию:
(1) On branch master - название текущей ветки
(2) Сообщение о коммитах
(3) Сообщение, которое говорит: "чтобы что-то закоммитить (то есть зафиксировать), нужно сначала это создать -
git add %Имя_файла%
- добавляет файл из папки в скр. директорию .git;
git add --all
- добавляет все файлы в папку .git;
git add .
- добавляет текущую папку в директорию .git. -
git commit -m %Имя_файла%
- (message - "сообщение") сохраняет измения файла с пояснением в папку.git.
git commit --amend --no-edit
- (от англ. amend — «исправить», «дополнить»; no-edit - "нет правок") позволяет добавить новый файл в последний коммит.no-edit
говорит нам о том, что мы не собираемся изменять сделанное нами сообщение. Если вместоno-edit
будет флаг-m
, то сообщение будет изменено на то, которое мы укажем. Если на место ключа ничего не поставить, то будут вызваны текстовые редакторы по умолчанию, с помощью которых можно изменить текст комментария. Эта команда работает только с последним коммитом (HEAD). -
git restore --staged <file>
- (от англ. restore — «восстановить») сбрасывает файл изstaged
(staging area) статуса обратно вuntracked
илиmodified
статус.
Чтобы сбросить все файлы изstaged
обратно вuntracked
илиmodified
можно воспользоваться командойgit restore --staged .
: она сбросить из staging area всю текущую папку (.
) -
git reset --hard %Хеш_коммита%
- (от англ. reset — «сброс», «обнуление» и hard — «суровый») возвращает код к более раннему варианту, сбрасывая все сохранения, сделанные благодаря коммитам,
до указанного сохранения. Все последующие версии кода, коммиты эта команда удаляет. -
git restore %file%
- Если файл был случайно, или нет, изменен и его статус сталmodified
, то эта команда помогает вернуть код до последней сохраненной версии (возвращает его в последнююtracked
-версию, т.е.
которая была сохранена с помощью git commit или git add). -
git diff
- (от англ. difference — «отличие», «разница») эта команда сравнивает последнюю закоммиченную версию файла с текущей.git diff
не показывает изменения вstaged
-файлах.
Чтобы посмотреть изменения вstaged
нужно использовать эту команду с флагом--staged
:git diff --staged
.
Передайтеgit diff
хеши обоих коммитов. Состояние файлов на момент первого переданного коммита будет сравниваться с состоянием файлов на момент второго.
Вместо хеша последнего коммита можно использоватьHEAD
.
По сути командаgit diff A B
выводит список инструкций: как из состояния А получить состояние В. Если поменять хеши местами (git diff B A
), то команда подскажет, как из Б получить А. -
echo "..."
- (англ. «эхо») выводит в консоль то, что ей передали в качестве параметра.
echo "..." >> %Имя_файла%
- записывает в конец файла то, что ей передали в качестве параметра.
echo "..." > %Имя_файла%
- стирает содержимое файла, а затем передает в него то, что передали в качестве параметра. -
git log
- (log - "Журнал") выводит все сделанные коммиты. По умолчанию они выводятся в обратном хронологическом порядке.
git log --oneline
- (сокращенный журнал) в терминале появится первые несколько символом хеша акждого коммита и их комментарии. -
ls -la .ssh/
- выводит содержимое папки .ssh. -
ssh-keygen
- генерирует ssh ключи. -
git remote add origin %URL удаленного репозитория%
(origin - "источник" - стандартный псевдоним удаленного репозитория) - (от англ. remote — «удалённый» и add — «добавить»)
привязывает удаленный репозиторий к локальному. -
git remote -v
(-v -короткая форма флага --verbose "подробный", позволяет показать больше информации в выводе) - выводит две строчки. Если строчки совпадают, позволяет нам убедиться что репозитории связаны. -
git push -u origin master
- ("толкать") загружает содержимое локального репозитория на github.
В первый раз эту команду нужно вызвать с флагом-u
и параметрами origin (имя удалённого репозитория) и main или master (название текущей ветки). Флаг -u свяжет локальную ветку с одноимённой удалённой.
В послудующие разы можно просто писать -git push
- Работаем с файлом, корректируем его
- Добавляем его в папку
.git
(git add %Имя_файла%
) - Сохраняем изменения с пояснением - делаем коммит (
git commit -m "...."
) - Связываем удаленный репозиторий и локальный (
git remote add origin %URL удаленного репозитория%
) - Загружаем файл на удаленный репозиторий (
git push -u origin master
илиgit push
)
- SSH ключи - (от англ. Secure Shell Protocol) это сетевой протокол. Когда компьютеры обмениваются данными в сети, они следуют сетевым протоколам (англ. network protocols) - правилам обмена данными между компьютерами.
Он обеспечивает безопасный обмен данными в сети. - SSH использует пару ключей для обеспечения безопасности — публичный и приватный.
Оба типа этих ключей находятся в папке .ssh, которая в свою очередь находится по умолчанию в домашней директории. - Untracked files - неотслеживаемые файлы. Надпись появляется при вызове команды git status, когда есть файлы, которые не отслеживает VCS