prog:git-start
Различия
Показаны различия между двумя версиями страницы.
— | prog:git-start [2024/05/02 13:20] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Начало работы с GIT ====== | ||
+ | |||
+ | Visual Studio Code | ||
+ | https:// | ||
+ | |||
+ | Смотрим версию | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | git version 2.34.1 | ||
+ | </ | ||
+ | |||
+ | Инициализируем репозиторий | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | подсказка: | ||
+ | Инициализирован пустой репозиторий Git в / | ||
+ | </ | ||
+ | |||
+ | STATUS Посмотрим что происходит??? | ||
+ | файлов в каталог проекта | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Неотслеживаемые файлы: | ||
+ | (используйте «git add < | ||
+ | git.txt | ||
+ | index.html | ||
+ | |||
+ | ничего не добавлено в коммит, | ||
+ | </ | ||
+ | |||
+ | Добавляем все файлы | ||
+ | |||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | </ | ||
+ | |||
+ | Посмотрим СТАТУС | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | </ | ||
+ | |||
+ | Можно убрать из отслеживания файл git.txt так: | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | error: следующие файлы содержат проиндексированные изменения отличающиеся и от файла, и от HEAD: | ||
+ | git.txt | ||
+ | (используйте опцию «-f» для принудительного удаления) | ||
+ | </ | ||
+ | |||
+ | Посмотрим на СТАТУС | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | Добавим файл git.txt обратно в отслеживаемые | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | </ | ||
+ | |||
+ | Посмотрим на СТАТУС | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | </ | ||
+ | |||
+ | Создал новый файл script.js и немного изменил существующие | ||
+ | Посмотрим СТАТУС | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | изменено: | ||
+ | |||
+ | Неотслеживаемые файлы: | ||
+ | (используйте «git add < | ||
+ | script.js | ||
+ | </ | ||
+ | |||
+ | Добавим все файлы и посмотрим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | </ | ||
+ | |||
+ | Изменим пару файликов (git.txt, index.html) и посмотрим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | Видим, что есть изменения. Добавляем... | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | |||
+ | Еще нет коммитов | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git rm --cached < | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | новый файл: | ||
+ | </ | ||
+ | |||
+ | Все изменения зафиксированы. Делаем первый " | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | [master (корневой коммит) d41013d] First commit | ||
+ | 3 files changed, 211 insertions(+) | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | На этом этапе у нас появился файл errors.err который мы не | ||
+ | хотим включать в отслеживаемые. Он не нужен. Это просто файл с ошибками | ||
+ | нашей системы. Посмотрим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | |||
+ | Неотслеживаемые файлы: | ||
+ | (используйте «git add < | ||
+ | errors.err | ||
+ | </ | ||
+ | |||
+ | Включаем этот файл в специальный файл игнорирования .gitignore, | ||
+ | после этого смотрим статус. Сам файл игнора тоже нужно добавить | ||
+ | в индекс. | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | На этом этапе создадим каталог logs/ в котором будут храниться | ||
+ | логи. Содержимое эттого каталога и сам каталог не нужны в индексе | ||
+ | Посмотрим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | |||
+ | Неотслеживаемые файлы: | ||
+ | (используйте «git add < | ||
+ | logs/ | ||
+ | </ | ||
+ | |||
+ | Добавим не нужный каталог в .gitignore и посмотрим статус | ||
+ | Видим, что каталог и его содержимое больше не отслеживается, | ||
+ | изменился сам .gitignore Его нужно добавить в индекс обязательно | ||
+ | И файлик описания в котором это все написано... | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | изменено: | ||
+ | |||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | Сделаем коммит | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | [master ffc8f01] Add .gitignore | ||
+ | 2 files changed, 79 insertions(+) | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Посмотрим лог... Видим два коммита | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | commit ffc8f0170c2acc2bb8923c2e8053117546434613 (HEAD -> master) | ||
+ | Author: aleonchik < | ||
+ | Date: Sat Nov 19 11:25:03 2022 +1000 | ||
+ | |||
+ | Add .gitignore | ||
+ | |||
+ | commit d41013ddfa9b9f770bf88207abb20cfa18be1990 | ||
+ | Author: aleonchik < | ||
+ | Date: Sat Nov 19 10:59:41 2022 +1000 | ||
+ | |||
+ | First commit | ||
+ | |||
+ | </ | ||
+ | |||
+ | Посмотрим на какой ветке мы находимся | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | </ | ||
+ | |||
+ | Создадим новую ветку test и посмотрим на ветки вообще, | ||
+ | указывает на какой ветке мы находимся | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | test | ||
+ | </ | ||
+ | |||
+ | Теперь удалим ветку test | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Ветка test удалена (была ffc8f01). | ||
+ | </ | ||
+ | |||
+ | Создадим ветку readme | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | readme | ||
+ | </ | ||
+ | |||
+ | Мы все еще находимся на ветке master. Переключимся на ветку | ||
+ | readme | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | M git.txt | ||
+ | Переключено на ветку «readme» | ||
+ | alexey@es15: | ||
+ | master | ||
+ | * readme | ||
+ | </ | ||
+ | |||
+ | Создадим новую ветку new и сразу переключимся на нее | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Переключено на новую ветку «new» | ||
+ | alexey@es15: | ||
+ | master | ||
+ | * new | ||
+ | readme | ||
+ | </ | ||
+ | |||
+ | Переключимся на ветку readme и удалим ветку new | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | M git.txt | ||
+ | Переключено на ветку «readme» | ||
+ | alexey@es15: | ||
+ | Ветка new удалена (была ffc8f01). | ||
+ | alexey@es15: | ||
+ | master | ||
+ | * readme | ||
+ | </ | ||
+ | |||
+ | Находясь в новой ветке (readme) создали файл README.md и смотрим | ||
+ | статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке readme | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | изменено: | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | |||
+ | Неотслеживаемые файлы: | ||
+ | (используйте «git add < | ||
+ | README.md | ||
+ | </ | ||
+ | |||
+ | Добавим и проверим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | На ветке readme | ||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | новый файл: | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | Сделаем коммит | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | [readme 92b0fdc] Created file README.md | ||
+ | 2 files changed, 97 insertions(+) | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Смотрим статус | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке readme | ||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | |||
+ | нет изменений добавленных для коммита | ||
+ | (используйте «git add» и/или «git commit -a») | ||
+ | </ | ||
+ | |||
+ | Находясь на ветке readme видим, что в ней есть файл README.md | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | master | ||
+ | * readme | ||
+ | alexey@es15: | ||
+ | итого 36K | ||
+ | drwxrwxr-x 2 alexey 4,0K ноя 19 11:17 logs/ | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey 1,4K ноя 19 10:52 index.html | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | </ | ||
+ | |||
+ | Переключимся на ветку master и посмотрим на листинг. Видим, что | ||
+ | файла README.md в этой ветке нет. | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Переключено на ветку «master» | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | readme | ||
+ | alexey@es15: | ||
+ | итого 28K | ||
+ | drwxrwxr-x 2 alexey 4,0K ноя 19 11:17 logs/ | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey 1,4K ноя 19 10:52 index.html | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | </ | ||
+ | |||
+ | Находясь на ветке master мы хотим объединить код с ветки | ||
+ | readme | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | readme | ||
+ | alexey@es15: | ||
+ | Обновление ffc8f01..21763a1 | ||
+ | Fast-forward | ||
+ | | ||
+ | | ||
+ | 2 files changed, 125 insertions(+) | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Удалим ветку readme - больше не нужна | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Ветка readme удалена (была 21763a1). | ||
+ | alexey@es15: | ||
+ | * master | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | нечего коммитить, | ||
+ | </ | ||
+ | |||
+ | Команды без параметров выводят тукущие данные | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | aleonchik | ||
+ | alexey@es15: | ||
+ | aleonchik@gmail.com | ||
+ | </ | ||
+ | |||
+ | Добавляем удаленный репозиторий на сервере и заливаем туда наш | ||
+ | проект. Не забываем, | ||
+ | git branch -M main | ||
+ | Наш master в main как просил GIT | ||
+ | | ||
+ | < | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | Перечисление объектов: | ||
+ | Подсчет объектов: | ||
+ | При сжатии изменений используется до 4 потоков | ||
+ | Сжатие объектов: | ||
+ | Запись объектов: | ||
+ | Всего 16 (изменений 5), повторно использовано 0 (изменений 0), повторно использовано пакетов 0 | ||
+ | remote: Resolving deltas: 100% (5/5), done. | ||
+ | To https:// | ||
+ | * [new branch] | ||
+ | Ветка «master» отслеживает внешнюю ветку «master» из «origin». | ||
+ | </ | ||
+ | |||
+ | Посмотрим на удаленные репозитории для нашего проекта | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | origin | ||
+ | alexey@es15: | ||
+ | origin https:// | ||
+ | origin https:// | ||
+ | </ | ||
+ | |||
+ | Изменили файл script.js Смотрим статус, | ||
+ | и проверяем статус | ||
+ | |||
+ | < | ||
+ | lexey@es15: | ||
+ | На ветке master | ||
+ | Ваша ветка обновлена в соответствии с «origin/ | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | |||
+ | нет изменений добавленных для коммита | ||
+ | (используйте «git add» и/или «git commit -a») | ||
+ | |||
+ | alexey@es15: | ||
+ | |||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Ваша ветка обновлена в соответствии с «origin/ | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | изменено: | ||
+ | |||
+ | alexey@es15: | ||
+ | [master 76863a1] console.log | ||
+ | 1 file changed, 1 insertion(+) | ||
+ | |||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Ваша ветка опережает «origin/ | ||
+ | (используйте «git push», чтобы опубликовать ваши локальные коммиты) | ||
+ | |||
+ | нечего коммитить, | ||
+ | </ | ||
+ | |||
+ | Теперь просто заливаем изменения на git | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Перечисление объектов: | ||
+ | Подсчет объектов: | ||
+ | При сжатии изменений используется до 4 потоков | ||
+ | Сжатие объектов: | ||
+ | Запись объектов: | ||
+ | Всего 3 (изменений 1), повторно использовано 0 (изменений 0), повторно использовано пакетов 0 | ||
+ | remote: Resolving deltas: 100% (1/1), completed with 1 local object. | ||
+ | To https:// | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Создадим каталог в любом другом месте и склонируем туда наш | ||
+ | репозиторий с сервера | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | Клонирование в «git-course»… | ||
+ | remote: Enumerating objects: 19, done. | ||
+ | remote: Counting objects: 100% (19/19), done. | ||
+ | remote: Compressing objects: 100% (11/11), done. | ||
+ | remote: Total 19 (delta 7), reused 18 (delta 6), pack-reused 0 | ||
+ | Получение объектов: | ||
+ | Определение изменений: | ||
+ | alexey@es15: | ||
+ | итого 4,0K | ||
+ | drwxrwxr-x 3 alexey 4,0K ноя 19 12:52 git-course/ | ||
+ | alexey@es15: | ||
+ | итого 28K | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey 1,4K ноя 19 12:52 index.html | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | -rw-rw-r-- 1 alexey | ||
+ | alexey@es15: | ||
+ | </ | ||
+ | |||
+ | Представим себе, что основная разработка это дома а в каталоге | ||
+ | newgc разработка на работе. Мы изменили что то на работе и | ||
+ | запушили это на сервер. | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Ваша ветка обновлена в соответствии с «origin/ | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git add < | ||
+ | (используйте «git restore < | ||
+ | изменено: | ||
+ | |||
+ | нет изменений добавленных для коммита | ||
+ | (используйте «git add» и/или «git commit -a») | ||
+ | alexey@es15: | ||
+ | alexey@es15: | ||
+ | На ветке master | ||
+ | Ваша ветка обновлена в соответствии с «origin/ | ||
+ | |||
+ | Изменения, | ||
+ | (используйте «git restore --staged < | ||
+ | изменено: | ||
+ | </ | ||
+ | |||
+ | Делаем коммит и пушим на сервер | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | [master 2103afe] Sample work on another comp | ||
+ | 1 file changed, 1 insertion(+) | ||
+ | |||
+ | alexey@es15: | ||
+ | Перечисление объектов: | ||
+ | Подсчет объектов: | ||
+ | </ | ||
+ | |||
+ | Придя домой мы должны обновить наш проект, | ||
+ | свежие изменения | ||
+ | |||
+ | < | ||
+ | alexey@es15: | ||
+ | remote: Enumerating objects: 5, done. | ||
+ | remote: Counting objects: 100% (5/5), done. | ||
+ | remote: Compressing objects: 100% (2/2), done. | ||
+ | remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 | ||
+ | Распаковка объектов: | ||
+ | Из https:// | ||
+ | | ||
+ | Обновление 76863a1..2103afe | ||
+ | Fast-forward | ||
+ | | ||
+ | 1 file changed, 1 insertion(+) | ||
+ | </ | ||
+ | |||
+ | |||
+ | Перейти на нужный коммит. Клонируем репозиторий как обычно. | ||
+ | |||
+ | < | ||
+ | git clone <url> | ||
+ | </ | ||
+ | |||
+ | В истории (на сайте или используя git log) находим нужный коммит или тег и переходим на него | ||
+ | |||
+ | < | ||
+ | git checkout <хеш коммита или тег> | ||
+ | </ | ||
+ | |||
+ | Можно указать не полный хеш а только уникальную его часть. | ||
+ | |||
+ | Опционально. Делаем ветку и переходим на нее | ||
+ | |||
+ | < | ||
+ | git checkout -b my-fork | ||
+ | </ | ||
+ | |||
+ | Удалить последний коммит. | ||
+ | |||
+ | Для отмены последнего коммита, | ||
+ | |||
+ | < | ||
+ | git reset --soft HEAD^ | ||
+ | </ | ||
+ | |||
+ | При этом изменённый код удалён не будет (будет зелёным цветом в git status). Вы можете подправить код и повторить коммит. | ||
+ | |||
+ | Это работает, | ||
+ | |||
+ | < | ||
+ | git revert sha1 | ||
+ | </ | ||
+ | |||
+ | --soft - отменит коммит, | ||
+ | --hard - отменит коммит и удалит изменения, | ||
+ | |||
+ | < | ||
+ | git reset --soft HEAD~2 | ||
+ | </ | ||
+ | |||
+ | отменит 2 последних коммита, | ||
+ | |||
+ | Откатиться назад на 2 коммита: | ||
+ | |||
+ | < | ||
+ | git reset --hard HEAD~2 | ||
+ | </ | ||
+ | |||
+ | Другими словами, | ||
prog/git-start.txt · Последнее изменение: 2024/05/02 13:20 — 127.0.0.1