Перейти к содержанию

Приветствуем в GitFlic


Итак, вы решили использовать git, но не знаете с чего начать? Эту документацию можно рассматривать в качестве настольного пособия и обращаться к ней по многим возникающим вопросам. Для начала вам следует создать свой проект. Когда вы создали свой новый репозиторий, необходимо подготовить локальное рабочее пространство. Используйте консоль на вашем ПК для работы.

Для большего удобства пользователям Windows мы рекомендуем установить отдельную консоль для работы с git. В поисковике введите запрос "Git для Windows", выберите предпочитаемое решение и установите его.

Создание локальной директории

Создайте локальный каталог для вашего будущего репозитория, выполнив команды в консоли:

cd ~/
mkdir repos
cd ~/repos

Глобальные настройки Git

Укажите свои данные, выполнив команды:

git config --global user.name "gitflic-user"
git config --global user.email "mail@gitflic.ru"

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

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

git clone http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
cd proekt
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Использовать существующую директорию

cd existing_folder
git init
git remote add origin http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
git add .
git commit -m "Initial commit"
git push -u origin master

Запушить существующий репозиторий

cd existing_folder
git remote rename origin old-origin
git remote add origin http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
git push -u origin --all
git push -u origin --tags

После выполнения команд мы видим, как локальная/удаленная директория наполнились файлами. Теперь, когда мы разобрались с настройкой репозитория, самое время узнать, как пользоваться ветками в системе git.

Создать ветку в git

Для создания новой ветки и мгновенного переключения на нее используется команда (где omega — название новой ветки):

git checkout -b omega

Также можно выполнить эти действия в 2 команды — отдельно создать ветку и отдельно в нее переключиться:

git branch omega
git checkout omega

Распространенные опции для git branch

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

git branch

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

git branch -a

Удаление ветки omega. Это «безопасная» операция, так как git не позволит удалить ветку, в которой есть неслитые изменения. Данная команда удаляет только локальную ветку:

git branch -d omega

Принудительное удаление ветки omega, даже несмотря на то, что в ней есть неслитые изменения. Эту команда следует использовать, если вы хотите полностью удалить все коммиты, которые относятся к определенному направлению разработки:

git branch -D omega
git push origin :refs/heads/omega

Для визуализации файлов под управлением git существует расширение TortoiseGit. Оно имеет логичный интерфейс и отображает иконки к файлам, находящимся под управлением git, для отображения их статуса.

Генерация публичного SSH ключа

Для работы с git многие серверы используют аутентификацию по ssh-ключу. Далее мы расскажем, как создать свой ssh-ключ для работы с git. Процесс создания ssh-ключа аналогичен на всех ОС. Первым делом убедитесь, что у вас отсутствует ssh-ключ на локальном компьютере, для этого выполните следующие команды:

cd ~/.ssh
ls

Ищите файл с именем id_dsa или id_rsa и одноименный файл с расширением .pub. Файл с расширением .pub — это ваш публичный ключ, а второй файл — ваш приватный ключ. Если указанные файлы у вас отсутствуют (или отсутствует директория .ssh), вы можете создать их используя команду:

ssh-keygen -t ed25519 -C "your_email@example.com"

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/gitflic_user/.ssh/id_ed25519):
Created directory '/home/gitflic_user/.ssh'.
Enter passphrase (empty for no passphrase): (оставьте пустым, нажмите Enter)
Enter same passphrase again:
Your identification has been saved in /home/gitflic_user/.ssh/id_ed25519.
Your public key has been saved in /home/gitflic_user/.ssh/id_ed25519.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:xx:yy:zz:96:93:49:da:9b:e3 gitflic_user@gitflic.ru

После создания вашего публичного ssh-ключа его необходимо прописать в настройках в разделе SSH ключи. Первым делом нужно получить ssh-ключ из файла. Вы можете открыть ваш публичный ssh-ключ в текстовом редакторе и полностью скопировать содержимое, либо выполнить следующую команду в консоли:

cat ~/.ssh/id_ed25519.pub

После того, как вы скопировали ssh-ключ, пропишите его в настройках, укажите название для ключа, например my-ssh, оставьте поле с датой окончания действия пустым, тогда ваш ssh-ключ будет всегда активен. После нажатия кнопки Добавить, публичный ключ будет отображаться в списке Ваши SSH ключи.

Распространенные команды при работе с git

git clone

При помощи команды git clone создается копия указанного репозитория в отдельном каталоге. Исходный репозиторий может находиться в локальной файловой системе или на удаленном устройстве, к которому можно получить доступ с помощью поддерживаемых протоколов.

Пример клонирования проекта в текущую директорию по https-протоколу:

git clone https://gitflic.ru/project/user/project.git

Пример клонирования проекта в текущую директорию по ssh-ключу:

git clone git@gitflic.ru:user/project.git

git add

Команда git add добавляет изменения рабочей директории в промежуточную область. Она сообщает git, что вы хотите включить обновления определенного файла в следующий коммит. Однако эта команда на самом деле не влияет на репозиторий каким-либо существенным образом — изменения фактически не записываются до тех пор, пока вы не выполните git commit.

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

git add .

Чтобы добавить в следующий коммит только один измененный файл, используется команда git add file-name, где file-name — полное имя файла:

git add file-name

В сочетании с этими командами вам также может понадобиться git status для просмотра состояния рабочего каталога и промежуточной области:

git status

git commit

Коммит проиндексированного состояния кода выполняется командой git commit:

git commit

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

Для выполнения коммита со всеми изменениями в рабочей директории введите команду git commit -a. Эта команда включает в коммит изменения уже отслеживаемых файлов (которые ранее были добавлены командой git add):

git commit -a

Команда git commit -m создаст коммит с указанным комментарием. По умолчанию команда git commit открывает локальный текстовый редактор для ввода комментария к коммиту. При передаче параметра -m используется добавленный комментарий, минуя текстовый редактор:

git commit -m "commit message"

Также есть параметр, который позволяет команде git commit изменять последний коммит. Вместо создания нового, все изменения добавляются в последний. Кроме того, после выполнения команды откроется текстовый редактор и предложит изменить ранее указанный комментарий к коммиту:

git commit --amend

git pull

Загрузка и слияние удаленного содержимого в локальный репозиторий выполняется командой git pull. Действие ее аналогично выполнению команд git fetch <remote> для загрузки содержимого из указанного удаленного репозитория и git merge origin/current-branch для слияния ссылок и указателей удаленного содержимого в новый локальный коммит:

git pull <remote>

Опция git pull --no-commit выполняет объединение, но не создает новый коммит со слитым содержимым:

git pull --no-commit <remote>

git push

Публикация указанной ветки в удаленном репозитории вместе со всеми необходимыми коммитами и внутренними объектами выполняется командой git push. Эта команда создает локальную ветку в репозитории назначения. Чтобы предотвратить перезапись коммитов, git не позволит опубликовать данные, если в репозитории назначения нельзя выполнить ускоренное слияние:

git push <remote> <branch>

Если для параметра <remote> указать значение origin и оставить пустым параметр branch, то изменения будут отправлены в ветку, которая выбрана в данный момент.

Параметр -u аналогично --set-upstream указывает удаленную ветку "по умолчанию", все последующие команды git pull/push будут автоматически общаться между текущей локальной и выбранной удаленной ветками. Данная команда указывается единожды, до тех пор, пока не понадобится указать другую удаленную ветку "по умолчанию":

git push -u origin master

Существует процедура очистки локальной и удаленной веток, которую целесообразно выполнять для поддержания порядка и не допущения накопления изменений, которые не будут загружены в основную ветку проекта. Первая команда очистит локальную ветку alpha. Если в команде git push перед именем ветки поставить двоеточие, будет стерта удаленная ветка:

git branch -D alpha
git push origin :alpha

git log

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

git log

Командой git log <путь> будет отображена история коммитов для указанного файла. Важно: команда показывает только те коммиты, которые вносят актуальные изменения в указанный файл. Если изменения файла были отменены в последующих коммитах, такие коммиты не будут отображаться. Это связано с тем, что данная команда анализирует изменения относительно текущего состояния файла.

git log <путь>

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

Команда git log --oneline отображает краткое описание каждого коммита в одной строке. Это может быть полезно, когда вы хотите получить общую информацию о коммитах без дополнительных деталей:

git log --oneline

С помощью git log --graph можно отобразить историю коммитов в виде графа. Это позволяет легко визуализировать разветвления и слияния веток и понять, какие коммиты влияют на другие:

git log --graph

Чтобы отобразить полный граф изменений и найти коммиты, которые могли быть отменены, используйте:

git log --all --decorate --oneline --graph

Командой git log --author=<имя> будут отображены только коммиты, сделанные указанным автором. Это полезно, когда вы хотите изучить историю коммитов для конкретного участника проекта:

git log --author=<имя>

Команда git log --since=<дата> отображает коммиты, сделанные после указанной даты. Это может быть полезно, когда вы хотите изучить коммиты, сделанные после определенного события или релиза.

git log --since=<дата>

Это лишь небольшой набор аргументов команды git log. Также можно использовать различные опции, такие как форматирование вывода, ограничение отображаемого количества коммитов и другие.

Вы можете узнать больше о git log, используя встроенную справку:

git help log