Основы Git

Содержание
Типичные команды пользователя
config: Задать имя пользователя Git
init: Инициализация репозитория Git
status: Текущее состояние репозитория
add: Добавить файл в staging area
reset: Удалить файл из staging area
restore: Удалить незаписанные изменения
commit: Записать изменения
checkout -- . : Восстановить последний коммит
chechout .: Восстановить удалённый файл
diff: Изучить изменения
файл .gitignore: игнорировать определённые файлы
git hash-object
Другие статьи про Git

Кратко

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

git status

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

git add index.html

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

git reset file.txt

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

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

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

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

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

git push origin master

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

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

$ 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, отдав команду создания репозитория из корневого каталога этого дерева (или указав корневой каталог в параметрах программы)

Важно понимать, что инициализировать репозиторий нужно в директории с проектом.

На одном копьютере могут быть десятки проектов и каждый из них может иметь свой репозиторий, который, в свою очередь может быть подлючён к github, gilab или куда-то ещё.

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

Можно настроить ваш терминал bash или zsh так, чтобы он показывал вам с каким именно репозиторием вы работаете и какая ветка активна.

Создать файл

$ touch index.html

status

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

$ git 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 add -A

Добавить все файлы из текущей директории

git add .

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

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 имя_файла

restore: удалить незаписанные изменения

Если файл добавлен в staging area, и при этом все незаписанные изменения нужно отменить подойдёт команда restore

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

Пример

touch test.txt git add test.txt echo "abc" >> test.txt cat test.txt

abc

git restore test.txt
cat test.txt

Файл вернулся в исходное состояние - стал пустым.

commit

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

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

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

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

$ git checkout -- .

Восстановить удалённый файл, если он не закоммичен можно выполнив

$ git checkout .

Если нужно вернуться к какому-то коммиту и удалить всё, что появилось после

git log

commit b662b06badbbddf3b6a824ff2f360e2d4ae32734 (HEAD -> master) Author: andrei Date: Tue Oct 16 20:41:27 2023 +0300 Adds all files created with new empty project

Находим нужный коммит. В данном примере он всего один - b662b06badbbddf3b6a824ff2f360e2d4ae32734

Делаем жёсткий ресет.

git reset --hard b662b06badbbddf3b6a824ff2f360e2d4ae32734

HEAD is now at b662b06 Adds all files created with new empty project

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

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

diff

Если вы внесли изменения можно изучить их командой

git diff

diff --git a/andrei/README.md b/andrei/README.md index de2ffa9..0741f41 100644 --- a/andrei/README.md +++ b/andrei/README.md @@ -69,4 +69,6 @@ Result Database Image Database +### Git Tutorial +[git-scm](https://git-scm.com/docs/gittutorial)

Если добавить эти изменения в staging area то увидеть их той же командой уже нельзя

git add -A
git diff

Нужно добавить флаг --cached

git diff --cached

diff --git a/andrei/README.md b/andrei/README.md index de2ffa9..0741f41 100644 --- a/andrei/README.md +++ b/andrei/README.md @@ -69,4 +69,6 @@ Result Database Image Database +### Git Tutorial +[git-scm](https://git-scm.com/docs/gittutorial)

.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

config

Для локальной настройки определённого репозитория используется файл config который находится в корне директории .git

[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true ignorecase = true [remote "origin"] url = git@github.com:AndreiOlegovich/mkdocs-demo-project.git fetch = +refs/heads/*:refs/remotes/origin/* puttykeyfile = C:\Users\Andrei\.ssh\putty [branch "main"] remote = origin merge = refs/heads/main [branch "topic/dev2"] remote = origin merge = refs/heads/topic/dev2

Предположим у вас в общих настройках git выставлен пользователь user0 с почтой user0@urn.su

Первым делом нужно проверить эти значения

$ git config user.name

user0

$ git config user.email

user0@urn.su

git config --list

… user.name=user0 user.email=user0@urn.su …

Эти настройки находятся в секции user файла gitconfig

vi ~/.gitconfig

… [user] name = user0 email = user0@urn.su

Чтобы поменять их например на user1, можно скопировать эту секцию в файл config из директории .git и заменить значения на нужные

[user] name = user1 email = user1@urn.su [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true ignorecase = true [remote "origin"] url = git@github.com:AndreiOlegovich/mkdocs-demo-project.git fetch = +refs/heads/*:refs/remotes/origin/* puttykeyfile = C:\Users\Andrei\.ssh\putty [branch "main"] remote = origin merge = refs/heads/main [branch "topic/dev2"] remote = origin merge = refs/heads/topic/dev2

Похожие статьи
Git
Установка
Основы
branch: Ветки
Перейти с HTTPS на SSH
.gitignore
Необходимые Bash команды
Remote
GitHub
GitLab
Ошибки
Git Bash
Работа с API GitHub
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......