Основы 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