Основы Git
Кратко
Проверяем обстановку
git status
Добавляем файл который хотим закоммитить
git add index.html
Убираем файл который не хотим сейчас коммитить
git reset file.txt
Коммитим с комментарием
git commit -m 'Лучшие самоучители на сайте www.eth1.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@eth1.ru"
Локальный пользователь
Если нужно пушить от другого пользователя можно использовать user.local для конкретного репозитория
Сперва нужно создать пару ключей и публичный ключ добавить в репозиторий.
Дадим ключу имя aogithub и будем действовать по
этой инструкции
ssh-keygen
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Andrei/.ssh/id_rsa): aogithub Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in aogithub Your public key has been saved in aogithub.pub The key fingerprint is: SHA256:cvv+vna9oR1T9tueN9pPKzS6VzINYAiYGKcUZ2uo7Ok Andrei@urnsulab The key's randomart image is: +---[RSA 3072]----+ | ==oo.. . | | ..=o. . o | | o o . . | |. . . . | | o . S . o| |. . o . = +o| | o . o ==o| |. . ..o=o@| | E .o=*=oOO| +----[SHA256]-----+
eval `ssh-agent -s`
Agent pid 2261
ssh-add ~/.ssh/aogithub
Identity added: /c/Users/Andrei/.ssh/aogithub (Andrei@urnsulab)
git clone git@github.com:AndreiOlegovich/robot_web_ui_test.git
Cloning into 'robot_web_ui_test'… warning: You appear to have cloned an empty repository.
cd robot_web_ui_test/ git config --local user.name "AndreiOlegovich" git config --local user.email "info@eth1.ru" git config --local core.sshcommand 'ssh -i ~/.ssh/aogithub -F /dev/null' git status
On branch main No commits yet nothing to commit (create/copy files and use "git add" to track)
echo "# robot_web_ui_test" >> README.md
git add README.md
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches it
git commit -m "first commit"
[main (root-commit) 05fe1fe] first commit 1 file changed, 1 insertion(+) create mode 100644 README.md
git push -u origin main
Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 245 bytes | 245.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To github.com:AndreiOlegovich/robot_web_ui_test.git * [new branch] main -> main branch 'main' set up to track 'origin/main'.
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 <andrei@aredel.com> 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
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 @@ URN.SU Database HeiHei.ru 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 @@ URN.SU Database HeiHei.ru 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@eth1.ru
Первым делом нужно проверить эти значения
$ git config user.name
user0
$ git config user.email
user0@eth1.ru
git config --list
… user.name=user0 user.email=user0@eth1.ru …
Эти настройки находятся в секции user файла gitconfig
vi ~/.gitconfig
… [user] name = user0 email = user0@eth1.ru
Чтобы поменять их например на user1, можно скопировать эту секцию в файл config из директории .git и заменить значения на нужные
[user] name = user1 email = user1@eth1.ru [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
Поиск в истории
Пример поиска слова value в истории файла README.md
git grep value $(git rev-list --all -- README.md) -- README.md
Автор статьи: Андрей Олегович
Git | |
Установка | |
Основы | |
branch: Ветки | |
stash | |
Перейти с HTTPS на SSH | |
.gitignore | |
Необходимые Bash команды | |
Remote | |
GitHub | |
GitLab | |
Ошибки | |
Git Bash | |
Работа с API GitHub |