Инструменты пользователя

Инструменты сайта


prog:git-start

Различия

Показаны различия между двумя версиями страницы.


prog:git-start [2024/05/02 13:20] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Начало работы с GIT ======
 +
 +Visual Studio Code
 +https://code.visualstudio.com/
 +
 +Смотрим версию
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git --version
 +git version 2.34.1
 +</code>
 +
 +Инициализируем репозиторий
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git init
 +подсказка: Using 'master' as the name for the initial branch. This default branch name
 +подсказка: is subject to change. To configure the initial branch name to use in all
 +подсказка: of your new repositories, which will suppress this warning, call:
 +подсказка: 
 +подсказка: git config --global init.defaultBranch <name>
 +подсказка: 
 +подсказка: Names commonly chosen instead of 'master' are 'main', 'trunk' and
 +подсказка: 'development'. The just-created branch can be renamed via this command:
 +подсказка: 
 +подсказка: git branch -m <name>
 +Инициализирован пустой репозиторий Git в /home/alexey/jsrc/git-course/.git/
 +</code>
 +
 +STATUS Посмотрим что происходит??? Перед этим, мы поместили пару
 +файлов в каталог проекта
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Неотслеживаемые файлы:
 +  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
 + git.txt
 + index.html
 +
 +ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте «git add», чтобы отслеживать их)
 +</code>
 +
 +Добавляем все файлы
 +
 +
 +<code>        
 +alexey@es15:~/jsrc/git-course$ git add .
 +</code>
 +
 +Посмотрим СТАТУС
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 +</code>
 +
 +Можно убрать из отслеживания файл git.txt так:
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git rm --cached git.txt 
 +error: следующие файлы содержат проиндексированные изменения отличающиеся и от файла, и от HEAD:
 +    git.txt
 +(используйте опцию «-f» для принудительного удаления)
 +</code>
 +
 +Посмотрим на СТАТУС
 +
 +<code>        
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      git.txt
 +</code>
 +
 +Добавим файл git.txt обратно в отслеживаемые
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git add git.txt
 +</code>
 +
 +Посмотрим на СТАТУС
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 +</code>
 +
 +Создал новый файл script.js и немного изменил существующие
 +Посмотрим СТАТУС
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      git.txt
 + изменено:      index.html
 +
 +Неотслеживаемые файлы:
 +  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
 + script.js
 +</code>
 +
 +Добавим все файлы и посмотрим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git add .
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 + новый файл:    script.js
 +</code>
 +
 +Изменим пару файликов (git.txt, index.html) и посмотрим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 + новый файл:    script.js
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      git.txt
 + изменено:      index.html
 +</code>
 +
 +Видим, что есть изменения. Добавляем...
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git add .
 +alexey@es15:~/jsrc/git-course$ git status
 +На ветке master
 +
 +Еще нет коммитов
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)
 + новый файл:    git.txt
 + новый файл:    index.html
 + новый файл:    script.js
 +</code>
 +
 +Все изменения зафиксированы. Делаем первый "коммит"
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git commit -m "First commit"
 +[master (корневой коммит) d41013d] First commit
 + 3 files changed, 211 insertions(+)
 + create mode 100644 git.txt
 + create mode 100644 index.html
 + create mode 100644 script.js
 +</code>
 +
 +На этом этапе у нас появился файл errors.err который мы не 
 +хотим включать в отслеживаемые. Он не нужен. Это просто файл с ошибками
 +нашей системы. Посмотрим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    .gitignore
 + изменено:      git.txt
 +
 +Неотслеживаемые файлы:
 +  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
 + errors.err
 +</code>
 +
 +Включаем этот файл в специальный файл игнорирования .gitignore,
 +после этого смотрим статус. Сам файл игнора тоже нужно добавить
 +в индекс.
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    .gitignore
 + изменено:      git.txt
 +</code>
 +
 +На этом этапе создадим каталог logs/ в котором будут храниться
 +логи. Содержимое эттого каталога и сам каталог не нужны в индексе
 +Посмотрим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    .gitignore
 + изменено:      git.txt
 +
 +Неотслеживаемые файлы:
 +  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
 + logs/
 +</code>
 +
 +Добавим не нужный каталог в .gitignore и посмотрим статус
 +Видим, что каталог и его содержимое больше не отслеживается, но
 +изменился сам .gitignore Его нужно добавить в индекс обязательно
 +И файлик описания в котором это все написано...
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    .gitignore
 + изменено:      git.txt
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      .gitignore
 + изменено:      git.txt
 +
 +alexey@es15:~/jsrc/git-course$ git add .
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    .gitignore
 + изменено:      git.txt
 +</code>
 +
 +Сделаем коммит
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git commit -m "Add .gitignore"
 +[master ffc8f01] Add .gitignore
 + 2 files changed, 79 insertions(+)
 + create mode 100644 .gitignore
 +</code>
 +
 +Посмотрим лог... Видим два коммита
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git log
 +commit ffc8f0170c2acc2bb8923c2e8053117546434613 (HEAD -> master)
 +Author: aleonchik <aleonchik@gmail.com>
 +Date:   Sat Nov 19 11:25:03 2022 +1000
 +
 +    Add .gitignore
 +
 +commit d41013ddfa9b9f770bf88207abb20cfa18be1990
 +Author: aleonchik <aleonchik@gmail.com>
 +Date:   Sat Nov 19 10:59:41 2022 +1000
 +
 +    First commit
 +
 +</code>
 +
 +Посмотрим на какой ветке мы находимся
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch 
 +* master
 +</code>
 +
 +Создадим новую ветку test и посмотрим на ветки вообще, звездочка
 +указывает на какой ветке мы находимся
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch test
 +alexey@es15:~/jsrc/git-course$ git branch 
 +* master
 +  test
 +</code>
 +
 +Теперь удалим ветку test
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch -D test 
 +Ветка test удалена (была ffc8f01).
 +</code>
 +
 +Создадим ветку readme
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch 
 +* master
 +  readme
 +</code>
 +
 +Мы все еще находимся на ветке master. Переключимся на ветку
 +readme
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git checkout readme 
 +M git.txt
 +Переключено на ветку «readme»
 +alexey@es15:~/jsrc/git-course$ git branch 
 +  master
 +* readme
 +</code>
 +
 +Создадим новую ветку new и сразу переключимся на нее
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git checkout -b new
 +Переключено на новую ветку «new»
 +alexey@es15:~/jsrc/git-course$ git branch 
 +  master
 +* new
 +  readme
 +</code>
 +
 +Переключимся на ветку readme и удалим ветку new
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git checkout readme 
 +M git.txt
 +Переключено на ветку «readme»
 +alexey@es15:~/jsrc/git-course$ git branch -D new 
 +Ветка new удалена (была ffc8f01).
 +alexey@es15:~/jsrc/git-course$ git branch 
 +  master
 +* readme
 +</code>
 +
 +Находясь в новой ветке (readme) создали файл README.md и смотрим
 +статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке readme
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + изменено:      git.txt
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      git.txt
 +
 +Неотслеживаемые файлы:
 +  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
 + README.md
 +</code>
 +
 +Добавим и проверим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git add .
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке readme
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + новый файл:    README.md
 + изменено:      git.txt
 +</code>
 +
 +Сделаем коммит
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git commit -m "Created file README.md"
 +[readme 92b0fdc] Created file README.md
 + 2 files changed, 97 insertions(+)
 + create mode 100644 README.md
 +</code>
 +
 +Смотрим статус
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке readme
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      git.txt
 +
 +нет изменений добавленных для коммита
 +(используйте «git add» и/или «git commit -a»)
 +</code>
 +
 +Находясь на ветке readme видим, что в ней есть файл README.md
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch 
 +  master
 +* readme
 +alexey@es15:~/jsrc/git-course$ ll
 +итого 36K
 +drwxrwxr-x 2 alexey 4,0K ноя 19 11:17 logs/
 +-rw-rw-r-- 1 alexey  109 ноя 19 11:03 errors.err
 +-rw-rw-r-- 1 alexey  16K ноя 19 12:09 git.txt
 +-rw-rw-r-- 1 alexey 1,4K ноя 19 10:52 index.html
 +-rw-rw-r-- 1 alexey   45 ноя 19 12:09 README.md
 +-rw-rw-r-- 1 alexey   61 ноя 19 10:43 script.js
 +</code>
 +
 +Переключимся на ветку master и посмотрим на листинг. Видим, что
 +файла README.md в этой ветке нет.
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git checkout master 
 +Переключено на ветку «master»
 +alexey@es15:~/jsrc/git-course$ git branch 
 +* master
 +  readme
 +alexey@es15:~/jsrc/git-course$ ll
 +итого 28K
 +drwxrwxr-x 2 alexey 4,0K ноя 19 11:17 logs/
 +-rw-rw-r-- 1 alexey  109 ноя 19 11:03 errors.err
 +-rw-rw-r-- 1 alexey  11K ноя 19 12:12 git.txt
 +-rw-rw-r-- 1 alexey 1,4K ноя 19 10:52 index.html
 +-rw-rw-r-- 1 alexey   61 ноя 19 10:43 script.js
 +</code>
 +
 +Находясь на ветке master мы хотим объединить код с ветки 
 +readme
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch 
 +* master
 +  readme
 +alexey@es15:~/jsrc/git-course$ git merge readme 
 +Обновление ffc8f01..21763a1
 +Fast-forward
 + README.md |   3 +++
 + git.txt   | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + 2 files changed, 125 insertions(+)
 + create mode 100644 README.md
 +</code>
 +
 +Удалим ветку readme - больше не нужна
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git branch -D readme 
 +Ветка readme удалена (была 21763a1).
 +alexey@es15:~/jsrc/git-course$ git branch
 +* master
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +нечего коммитить, нет изменений в рабочем каталоге
 +</code>
 +
 +Команды без параметров выводят тукущие данные
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git config --global user.name
 +aleonchik
 +alexey@es15:~/jsrc/git-course$ git config --global user.email
 +aleonchik@gmail.com
 +</code>
 +
 +Добавляем удаленный репозиторий на сервере и заливаем туда наш
 +проект. Не забываем, что мы не переименовали
 +git branch -M main
 +Наш master в main как просил GIT
 +        
 +<code>
 +alexey@es15:~/jsrc/git-course$ git remote add origin https://github.com/aleonchik/git-course.git
 +alexey@es15:~/jsrc/git-course$ git push -u origin master
 +Перечисление объектов: 16, готово.
 +Подсчет объектов: 100% (16/16), готово.
 +При сжатии изменений используется до 4 потоков
 +Сжатие объектов: 100% (14/14), готово.
 +Запись объектов: 100% (16/16), 4.52 КиБ | 578.00 КиБ/с, готово.
 +Всего 16 (изменений 5), повторно использовано 0 (изменений 0), повторно использовано пакетов 0
 +remote: Resolving deltas: 100% (5/5), done.
 +To https://github.com/aleonchik/git-course.git
 + * [new branch]      master -> master
 +Ветка «master» отслеживает внешнюю ветку «master» из «origin».
 +</code>
 +
 +Посмотрим на удаленные репозитории для нашего проекта
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git remote 
 +origin
 +alexey@es15:~/jsrc/git-course$ git remote -v
 +origin https://github.com/aleonchik/git-course.git (fetch)
 +origin https://github.com/aleonchik/git-course.git (push)
 +</code>
 +
 +Изменили файл script.js Смотрим статус, добавляем и делаем коммит
 +и проверяем статус
 +
 +<code>
 +lexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Ваша ветка обновлена в соответствии с «origin/master».
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      script.js
 +
 +нет изменений добавленных для коммита
 +(используйте «git add» и/или «git commit -a»)
 +
 +alexey@es15:~/jsrc/git-course$ git add script.js 
 +
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Ваша ветка обновлена в соответствии с «origin/master».
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + изменено:      script.js
 +
 +alexey@es15:~/jsrc/git-course$ git commit -m "console.log"
 +[master 76863a1] console.log
 + 1 file changed, 1 insertion(+)
 +
 +alexey@es15:~/jsrc/git-course$ git status 
 +На ветке master
 +Ваша ветка опережает «origin/master» на 1 коммит.
 +  (используйте «git push», чтобы опубликовать ваши локальные коммиты)
 +
 +нечего коммитить, нет изменений в рабочем каталоге
 +</code>
 +
 +Теперь просто заливаем изменения на git
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git push
 +Перечисление объектов: 5, готово.
 +Подсчет объектов: 100% (5/5), готово.
 +При сжатии изменений используется до 4 потоков
 +Сжатие объектов: 100% (3/3), готово.
 +Запись объектов: 100% (3/3), 329 байтов | 329.00 КиБ/с, готово.
 +Всего 3 (изменений 1), повторно использовано 0 (изменений 0), повторно использовано пакетов 0
 +remote: Resolving deltas: 100% (1/1), completed with 1 local object.
 +To https://github.com/aleonchik/git-course.git
 +   21763a1..76863a1  master -> master
 +</code>
 +
 +Создадим каталог в любом другом месте и склонируем туда наш
 +репозиторий с сервера
 +
 +<code>
 +alexey@es15:~/jsrc/newgc$ git clone https://github.com/aleonchik/git-course.git
 +Клонирование в «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
 +Получение объектов: 100% (19/19), 4.73 КиБ | 1.58 МиБ/с, готово.
 +Определение изменений: 100% (7/7), готово.
 +alexey@es15:~/jsrc/newgc$ ll
 +итого 4,0K
 +drwxrwxr-x 3 alexey 4,0K ноя 19 12:52 git-course/
 +alexey@es15:~/jsrc/newgc$ ll git-course/
 +итого 28K
 +-rw-rw-r-- 1 alexey  16K ноя 19 12:52 git.txt
 +-rw-rw-r-- 1 alexey 1,4K ноя 19 12:52 index.html
 +-rw-rw-r-- 1 alexey   45 ноя 19 12:52 README.md
 +-rw-rw-r-- 1 alexey   82 ноя 19 12:52 script.js
 +alexey@es15:~/jsrc/newgc$ 
 +</code>
 +
 +Представим себе, что основная разработка это дома а в каталоге
 +newgc разработка на работе. Мы изменили что то на работе и
 +запушили это на сервер.
 +
 +<code>
 +alexey@es15:~/jsrc/newgc/git-course$ git status 
 +На ветке master
 +Ваша ветка обновлена в соответствии с «origin/master».
 +
 +Изменения, которые не в индексе для коммита:
 +  (используйте «git add <файл>…», чтобы добавить файл в индекс)
 +  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
 + изменено:      script.js
 +
 +нет изменений добавленных для коммита
 +(используйте «git add» и/или «git commit -a»)
 +alexey@es15:~/jsrc/newgc/git-course$ git add script.js 
 +alexey@es15:~/jsrc/newgc/git-course$ git status 
 +На ветке master
 +Ваша ветка обновлена в соответствии с «origin/master».
 +
 +Изменения, которые будут включены в коммит:
 +  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)
 + изменено:      script.js
 +</code>
 +
 +Делаем коммит и пушим на сервер
 +
 +<code>
 +alexey@es15:~/jsrc/newgc/git-course$ git commit -m "Sample work on another comp"
 +[master 2103afe] Sample work on another comp
 + 1 file changed, 1 insertion(+)
 +
 +alexey@es15:~/jsrc/newgc/git-course$ git push 
 +Перечисление объектов: 5, готово.
 +Подсчет объектов: 100% (5/5), готово.
 +</code>
 +
 +Придя домой мы должны обновить наш проект, скачав с сервера
 +свежие изменения
 +
 +<code>
 +alexey@es15:~/jsrc/git-course$ git pull
 +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
 +Распаковка объектов: 100% (3/3), 328 байтов | 82.00 КиБ/с, готово.
 +Из https://github.com/aleonchik/git-course
 +   76863a1..2103afe  master     -> origin/master
 +Обновление 76863a1..2103afe
 +Fast-forward
 + script.js | 1 +
 + 1 file changed, 1 insertion(+)
 +</code>
 +
 +
 +Перейти на нужный коммит. Клонируем репозиторий как обычно.
 +
 +<code>
 +git clone <url>
 +</code>
 +
 +В истории (на сайте или используя git log) находим нужный коммит или тег и переходим на него
 +
 +<code>
 +git checkout <хеш коммита или тег>
 +</code>
 +
 +Можно указать не полный хеш а только уникальную его часть.
 +
 +Опционально. Делаем ветку и переходим на нее
 +
 +<code>
 +git checkout -b my-fork
 +</code>
 +
 +Удалить последний коммит.
 +
 +Для отмены последнего коммита, если изменения ещё не опубликованы на сервер (не сделан git push) воспользоваться командой:
 +
 +<code>
 +git reset --soft HEAD^
 +</code>
 +
 +При этом изменённый код удалён не будет (будет зелёным цветом в git status). Вы можете подправить код и повторить коммит.
 +
 +Это работает, если вы не опубликовали свои изменения. Если же вы уже опубликовали изменения, то не остается ничего другого, как сделать коммит, который отменяет какой-то коммит (sha1 коммита можно посмотреть командой git log), например:
 +
 +<code>
 +git revert sha1
 +</code>
 +
 +--soft - отменит коммит, но сохранит изменения в файлах
 +--hard - отменит коммит и удалит изменения, сделанные коммитом.
 +
 +<code>
 +git reset --soft HEAD~2
 +</code>
 +
 +отменит 2 последних коммита, сохранив изменения. Будут видны в git status. 
 +
 +Откатиться назад на 2 коммита:
 +
 +<code>
 +git reset --hard HEAD~2
 +</code>
 +
 +Другими словами, отменить 2 последних коммита.
  
prog/git-start.txt · Последнее изменение: 2024/05/02 13:20 — 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki