Git

Содержание
Типичные команды пользователя
Установка
--version: Узнать версию Git
config: Задать имя пользователя Git
init: Инициализация репозитория Git
status: Текущее состояние репозитория
add: Добавить файл в staging area
reset: Удалить файл из staging area
commit: Записать изменения
checkout -- . : Восстановить последний коммит
clone: Клонировать (скачать) репозиторий
Создать бесплатный репозиторий на GitLab
Доступ к GitLab по ssh
Удалённое хранение на GitHub
remote -v: Проверить с каким удалённым репозиторием git связывает локальный репозиторий
remote set-url: Изменить привязанный удалённый репозиторий
push: Отправить новые данные на удалённый репозиторий
pull: Загрузить данные из удалённого репозитория и обновить ими локальный
branch: Ветки
checkout: Сменить ветку
-d: Удалить ветку
файл .gitignore: игнорировать определённые файлы
git hash-object
Другие статьи про Git

Кратко

Проверяем обстановку

git status

Добавляем файл который хотим закоммитить

git add index.html

Если файлов много и Вы хотите добавить все используйте

git add -A

Убираем файл который не хотим сейчас коммитить

git reset file.txt

Коммитим с комментарием

git commit -m 'Лучшие самоучители на сайте www.andreyolegovich.ru'

Стэйджим и коммитим с комментарием одной командой

git commit -am 'Наш любимый сайт www.HeiHei.ru'

Пушим на сервер в мастер

git push origin master

Установка Git

В Ubuntu , Debian и подобных ОС нужно выполнить

sudo apt install git

В Rocky , CentOS , RedHat и похожих:

sudo yum install git

Для Windows скачать Git можно здесь про установку есть подробная статья «Установка Git в Windows»

Узнать версию установленного Git

Узнать версию установленного Git можно с помощью опции version

$ git --version

git version 2.22.0.windows.1

Пользователь

Задать имя активного пользовотеля

$ git config --global user.name "Andrei"

Проверить имя активного пользовотеля

$ git config user.name

Andrei

Задать email активного пользовотеля

$ git config --global user.email "www.aolegovich.ru@andreyolegovich.ru"

init

Начать отслеживать изменения - инициализаци или начало работы Git

$ git init

Initialized empty Git repository in C:/Users/aolegovich/Desktop/Sites/hello-world/.git/

Википедия: По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории.

Любое файловое дерево в системе можно превратить в репозиторий git, отдав команду создания репозитория из корневого каталога этого дерева (или указав корневой каталог в параметрах программы)

Создать файл

$ touch "index.html"

status

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

$ git status

On branch master

No commits yet

Untracked files:
   (use "git add <file>..." to include in what will be committed)

        index.html

nothing added to commit but untracked files present (use "git add" to track)

Файл, в котором произошли изменения выделен красным

add

Добавить файл в группу файлов, которые Вы планируете зафиксировать (staging area)

$ git add index.html

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

$ git status

On branch master

No commits yet

Changes to be committed:
   (use "git rm --cached <file>..." to unstage)

        new file: index.html

Файл, который был добавлен в staging area выделен зелёным

Удалить файл из staging area

Если вы добавили что-то лишнее

$ git reset имя_файла

commit

Зафиксировать изменения - записать изменения файла в репозиторий.

$ git commit -m 'Мой первый коммит.'

[master (root-commit) e2d3195] My first commit.
1 file changed, 1 insertion(+)
create mode 100644 index.html

Вернуть файл к последнему закоммиченному состоянию

$ git checkout -- .

clone

Клонировать другой репозиторий

$ git clone https://github.com/Project/Project.git

Cloning into 'welcome-to-git'...
remote: Enumerating objects: 9, done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
Unpacking objects: 100% (9/9), done.

Либо по SSH

$ git clone git@gitlab.com:Project/Project.git

Синтаксис выбирается в зависимости от типа авторизации: паролем, по ключу и т.д.

Создать бесплатный репозиторий на GitLab

Адрес - gitlab.com/sing_in или gitlab.com/users/sing_in

Нужно зарегистрироваться, подтвердить почту и создать первый проект.

Доступ к GitLab по ssh

Добавить ключ gitlab.com

Перейдите в домашнюю директорию и сгенерируйте ключ с помощью ssh keygen

cd
ssh-keygen -t rsa -b 2048

Ключ проще всего назвать gitlab_com_rsa

Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Andrei/.ssh/id_rsa): gitlab_com_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in gitlab_com_rsa Your public key has been saved in gitlab_com_rsa.pub The key fingerprint is: SHA256:wAhrNr63vvUrQvhP6dbekTHlk6wtP7Y+fIJWnpLyCQN Andrei@DESKTOP-OP43ER5 The key&339;s randomart image is: +---[RSA 2048]----+ | . . | | 2 = + . | |E * = = | | . + . B . | | ... =+ S | | .. .. =. | | .o..*=+ | | ..=J=*+o. | | +PP=+*= | +----[SHA256]-----+

Создайте файл config

touch ~/.ssh/config
vi ~/.ssh/config

# GitLab.com Host gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitlab_com_rsa

Копируем содержимое ключа в буфер.

В Windows GitBash

cat ~/.ssh/gitlab_com_rsa.pub | clip

В Linux если стоит xclip

xclip -sel clip < ~/.ssh/gitlab_com_rsa.pub

Скопированный ключ нужно вставить в поле Key в gitlab.com/~/profile/keys

User Settings > SSH Keys

GitLab сохранить свой ssh ключ изображение с сайта www.andreyolegovich.ru
GitLab.com
Пример

Теперь можно клонировать из GitLab по SSH

mkdir test
cd test
git init
touch .gitignore
git clone git@gitlab.com:ВАШ_АККАУНТ/ИМЯ_ПРОЕКТА.git

GitHub

Адрес - github.com

Бесплатный (Free) аккаунт означает, что Вы можете работать только с публичным (Public) репозиторием.

О работе с публичным API github читайте здесь

Все могут видеть Ваш код, но редактировать его можете только Вы.

Не храните в публичном репозитории файлы с паролями. Если Вам нужна приватность - покупайте приватный режим (Private) или переходите на другой сервис, например BitBucket.org.

После того как аккаунт создан нажмите на плюсик и выберите New repository

Создать новый профиль на github изображение с сайта www.andreyolegovich.ru

Изменить директорию

$ cd /c/Users/aolegovich/Desktop/Sites

Как клонировать репозиторий с GitHub уже разбирали здесь например:

$ git clone https://github.com/Name/name.git

Cloning into 'heihei.ru'...

remote: Enumerating objects: 83, done.
remote: Total 83 (delta 0), reused 0 (delta 0), pack-reused 83
Unpacking objects: 100% (83/83), done.

remote -v

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

$ git remote -v

origin https://github.com/Name/name.git (fetch)
origin https://github.com/Name/name.git (push)

Если Вы ещё не подключились ни к github ни к gitlab ни к другим сервисам, сделать это можно командой

git remote add origin https://git.company.com/user/projectName.git

Конечно, предварительно нужно создать проект на сайте сервиса + нужно заранее сделать git init .

remote set-url

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

$ git remote set-url origin https://github.com/YourAccount/your project name.git

Проверить изменился ли привязанный репозиторий

$ git remote -v

origin https://github.com/YourAccount/your project name.git (fetch)
origin https://github.com/YourAccount/your project name.git (push)

push

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

$ git push origin master

Enumerating objects: 83, done.
Counting objects: 100% (83/83), done.
Delta compression using up to 4 threads
Compressing objects: 100% (81/81), done.
Writing objects: 100% (83/83), 3.36 MiB | 3.19 MiB/s, done.
Total 83 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To https://github.com/andreiolegovichru/travel-site.git
* [new branch] master -> master

Если нужно делать push из другой ветки - просто напишите её называние вместо master

git push origin some/other/branch_name

Enumerating objects: 30, done. Counting objects: 100% (30/30), done. Delta compression using up to 8 threads Compressing objects: 100% (26/26), done. Writing objects: 100% (26/26), 6.32 KiB | 6.32 MiB/s, done. Total 26 (delta 7), reused 0 (delta 0) remote: remote: To create a merge request for some/other/branch_name, visit: remote: https://gitlab.yourcompany.com/Project/Project/merge_requests/new?merge_request%5Bsource_branch%5D=some%2Fother%2Fbranch_name remote: To gitlab.ssh.com:IAM/IAM.git abcdefdc8..abcdef000 topic/qa/init_perf_test_controller -> topic/qa/init_perf_test_controller

Затем нужно перейти по ссылке

https://gitlab.yourcompany.com/Project/Project/merge_requests/new?merge_request%5Bsource_branch%5D=some%2Fother%2Fbranch_name

и сделать Merge Request

pull

Если удалённый репозиторий ушёл вперед и вы хотите обновить свой локальный репозиторий данными с удалённого

$ git pull origin master

Ветки (Branches)

Посмотреть какая ветка сейчас активна

$ git branch

* master

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

$ git status

On branch master
nothing to commit, working tree clean

Создать новую ветку

$ git branch new-branch

Проверить появилась ли она в списке

$ git branch

* master
new-branch

Перейти в новую ветку

$ git checkout new-branch

Switched to branch 'new-branch'

Вернуться в ветку master

$ git checkout master

Если Вы сделали в ветке new-branch какие-то изменения, закоммитили из и теперь хотите, добавить эти изменения в ветку master нужно выполнить команду merge

$ git merge new-branch

Updating f521fc5..fe7276a
Fast-forward
index.html | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

Создать новую ветку и сразу перейти в неё можно одной командой

$ git checkout -b new-branch-2

Удалить ветку

Удалить локальную ветку

git branch -d branchName

Deleted branch branchName (was 1ce400ce6).

Удалить внешнюю ветку

git push origin --delete remoteBranchName

.gitignore

Часто бывает нежелательным отслеживать все изменения до единого. Если Вы хотите сфокусироваться на основном коде, можно создать файл .gitignore и добавить туда расширения файлов, которые Вы не будете добавлять в репозиторий.

Пример файла .gitignore в котором мы указываету git не следить за ошибками, логами директорией .tmp и модулями nodejs

# Ignoring:
*.err
*.log
node_modules/
.tmp/

Подробнее про составление правил для .gitignore читайте в статье

«Синтаксис .gitignore»

git hash-object

$ echo "HeiHei.ru" | git hash-object --stdin

0bdb2c54a9617d62b661102a4862b417d7bdde9b

Похожие статьи
Git
Установка в Windows
Установка TortoiseGit
.gitignore
Необходимые Bash команды
Ошибки
Программирование
DevOps
SSH
Работа с API GitHub
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: