Приветствуем в 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