Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Жалнин В.Ю. Группа: А-01-22 Проверил: Примечание: работа выполнялась на Windows. 1) Создал на рабочем столе каталог lab02.02 и запустил в нем Git Bash, приглашение: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ 2) Просмотрел файлы в рабочем каталоге командой "ls" - пусто: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ ls ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ 3) Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ mkdir alice ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ mkdir bob ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02 $ cd alice ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice $ mkdir project ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice $ cd project ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project $ cd .. ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice $ cd project ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project $ 4) Инициализировал репозитарий, изменил имя ветки и через команду ls -A увидел его наличие: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/ПК/Desktop/lab02/alice/project/.git/ ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (master) $ git branch -m main ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ 5) Настроил репозитарий, чтобы коммиты были от моего имени: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.name 'Alice (ZhalninVY)' ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.email 'ZhalninVY@mpei.ru' 6) Запустил CodeBlocks и создал проект в репозитарии Алисы: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main No commits yet (нет файлов для коммита) Untracked files: (В рабочей копии замечен файл, но Git его не отслеживает.) (use "git add ..." to include in what will be committed) bin/ main.cpp obj/ project.cbp nothing added to commit but untracked files present (use "git add" to track) 7) Заношу файл main.cpp под Git ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp 8) Закомитил файл main.cpp и короткое сообщение (в одинарных или двойных ковычках): ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) 70a6613] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp 9) Добавил файл project.cbp в индекс, закомитил его с комментарием: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project.cbp warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main e80d54b] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp 10) Использование команды $ git status после изменения файла main.cpp: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp //модифицированный файл Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ no changes added to commit (use "git add" and/or "git commit -a") При сравнении случаев, когда добавлялся новый файл, и когда изменился существующий, можно заметить, что в случае, когда файл был изменен после добавления в индекс, изменения необходимо закомитить отдельно. 11) 1 способ закомитить изменения: Выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: добавлен ввод двух чисел' [main 1036577] code: добавлен ввод двух чисел 1 file changed, 4 insertions(+), 2 deletions(-) 12) 2 способ закомитить изменения: Добавить в индекс все изменения, затем сделать коммит: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: добавлен вывод суммы' [main cdfe6e6] code: добавлен вывод суммы 1 file changed, 1 insertion(+) 13) 3 способ закомитить изенения: Добавить все изменения в индекс и сделать коммит в один шаг: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'code: добавлен вывод разности' [main 00a04ef] code: добавлен вывод разности 1 file changed, 2 insertions(+), 1 deletion(-) Удобен когда коммит меняет уже существующий файл. 14) Игнорирование файлов: Создаем файл в codeblocks с подпись /bin, /obj и /project.layout в разных строках ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore nothing added to commit but untracked files present (use "git add" to track) Как можно заметить, бинарные файлы bin, obj и project.layout пропали. Закомитим файл игнорирования: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add .gitignore ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'git: добавлен файл игнорирования' [main 0b0f71a] git: добавлен файл игнорирования 1 file changed, 3 insertions(+) create mode 100644 .gitignore 15) Просмотрел коммиты репозитария: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --stat commit 0b0f71a0b032c71d9996df35ffc6b42336bcbe0c (HEAD -> main) Author: Alice (ZhalninVY) Date: Sat May 20 19:19:42 2023 +0300 git: добавлен файл игнорирования .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 00a04efe36eb81bff41ac99ecbad7a6d28e925a7 Author: Alice (ZhalninVY) Date: Sat May 20 19:12:59 2023 +0300 code: добавлен вывод разности main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit cdfe6e61aa8d95bcae4bddabd20581bfbca09f49 Author: Alice (ZhalninVY) Date: Sat May 20 19:12:11 2023 +0300 code: добавлен вывод суммы main.cpp | 1 + 1 file changed, 1 insertion(+) commit 10365779994a810cb539361509747a5832e596fb Author: Alice (ZhalninVY) Date: Sat May 20 19:11:14 2023 +0300 code: добавлен ввод двух чисел main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit e80d54bbefde66975d12337c80b3b55975a986f3 Author: Alice (ZhalninVY) Date: Sat May 20 19:07:26 2023 +0300 build: добавлен файл проекта project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 70a6613e8627d6238d356e93413ed72351145cb5 Author: Alice (ZhalninVY) Date: Sat May 20 19:06:22 2023 +0300 code: заготовка программы main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate 0b0f71a (HEAD -> main) git: добавлен файл игнорирования 00a04ef code: добавлен вывод разности cdfe6e6 code: добавлен вывод суммы 1036577 code: добавлен ввод двух чисел e80d54b build: добавлен файл проекта 70a6613 code: заготовка программы ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 0b0f71a (HEAD -> main) git: добавлен файл игнорирования * 00a04ef code: добавлен вывод разности * cdfe6e6 code: добавлен вывод суммы * 1036577 code: добавлен ввод двух чисел * e80d54b build: добавлен файл проекта * 70a6613 code: заготовка программы Поиск коммита, затрагивающий project.cbp: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit e80d54bbefde66975d12337c80b3b55975a986f3 Author: Alice (ZhalninVY) Date: Sat May 20 19:07:26 2023 +0300 build: добавлен файл проекта Поиск коммита, название которого имеет тему "build:" : ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "build:" commit e80d54bbefde66975d12337c80b3b55975a986f3 Author: Alice (ZhalninVY) Date: Sat May 20 19:07:26 2023 +0300 build: добавлен файл проекта 16) Просмотр журнала: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD commit 0b0f71a0b032c71d9996df35ffc6b42336bcbe0c (HEAD -> main) Author: Alice (ZhalninVY) Date: Sat May 20 19:19:42 2023 +0300 git: добавлен файл игнорирования diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4d72a82 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/project.layout 17) Просмотр коммитов (предпоследнего коммита): ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD~1 commit 00a04efe36eb81bff41ac99ecbad7a6d28e925a7 Author: Alice (ZhalninVY) Date: Sat May 20 19:12:59 2023 +0300 code: добавлен вывод разности diff --git a/main.cpp b/main.cpp index 1967dd8..2d3e243 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git show 00a04ef commit 00a04efe36eb81bff41ac99ecbad7a6d28e925a7 Author: Alice (ZhalninVY) Date: Sat May 20 19:12:59 2023 +0300 code: добавлен вывод разности diff --git a/main.cpp b/main.cpp index 1967dd8..2d3e243 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main~1 commit 00a04efe36eb81bff41ac99ecbad7a6d28e925a7 Author: Alice (ZhalninVY) Date: Sat May 20 19:12:59 2023 +0300 code: добавлен вывод разности diff --git a/main.cpp b/main.cpp index 1967dd8..2d3e243 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } 18) Просмотр изменений: Просмотрим изменения рабочей копии: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it diff --git a/main.cpp b/main.cpp index 2d3e243..64da2d3 100644 --- a/main.cpp +++ b/main.cpp @@ -8,6 +8,7 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n'; } diff --git a/project.cbp b/project.cbp index 99bb702..34f06bc 100644 --- a/project.cbp +++ b/project.cbp @@ -32,6 +32,7 @@ + Просмотр разницы изменений двух комитов ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff 70a6613 00a04ef diff --git a/main.cpp b/main.cpp index b4392ec..2d3e243 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,10 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + } 19) Откат изменений Во-первых, закомитил изменения рабочей копии (вывод произведения) ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: добавлен вывод произведения' [main 48dbf41] code: добавлен вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) Далее делаем откат изменений к предыдущей версии ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~1 (HEAD~1 - коммит к которому откатывают изменения) HEAD is now at 0b0f71a git: добавлен файл игнорирования или добавим комментарий над main() и откатим этот файл к состоянию в последнем коммите ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp 20) Создание пары ключей для доступа к серверу ssh-keygen Запустим агент, который работает в фоне и предоставляет ключи другим программам, в том числе git: eval $(ssh-agent -s) Далее скопировать открытый ключ при помощи команды cat ~/.ssh/id_rsa.pub и добавить в список открытых ключей своей учетной записи. 21)Создаем репозитарий под названием cs-lab02. Далее клонируем проект в каталог Bob: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob $ git clone git@uit.mpei.ru:ZhalninVY/cs-lab02.git project Cloning into 'project'... remote: Enumerating objects: 18, done. remote: Counting objects: 100% (18/18), done. remote: Compressing objects: 100% (16/16), done. remote: Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (18/18), done. Resolving deltas: 100% (2/2), done. Далее переходим в каталог проекта (project): ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob $ cd project После настраиваем git конфиг как с Alice: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name 'Bob (ZhalninVY)' ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email 'ZhalninVY@mpei.ru' 22)Совместная работа над проектом без конфликтов правок: «На машине Боба» добавляем в программу печать произведения чисел и делаем коммит: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -m 'code: добавлен вывод произведения' [main 3b58c8d] code: добавлен вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) Отправляем коммит на сервер: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 425 bytes | 425.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:ZhalninVY/cs-lab02.git 0b0f71a..3b58c8d main -> main «На машине Алисы» выполнить загрузку изменений: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 405 bytes | 81.00 KiB/s, done. From uit.mpei.ru:ZhalninVY/cs-lab02 0b0f71a..3b58c8d main -> origin/main Просмотрим историю всех веток: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 3b58c8d (origin/main) code: добавлен вывод произведения * 0b0f71a (HEAD -> main) git: добавлен файл игнорирования * 00a04ef code: добавлен вывод разности * cdfe6e6 code: добавлен вывод суммы * 1036577 code: добавлен ввод двух чисел * e80d54b build: добавлен файл проекта * 70a6613 code: заготовка программы Как можно видеть, ветка main отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating 0b0f71a..3b58c8d Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 23)Разрешение конфликтов при совместной работе Дополним у Alice вывод максимума, у Bob - вывод минимума, попробуем сделать коммит и отправить его на сервер: Для Alice: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: добавлен вывод максимума' [main 9c53d6f] code: добавлен вывод максимума 1 file changed, 4 insertions(+) ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 435 bytes | 435.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:ZhalninVY/cs-lab02.git a502524..9c53d6f main -> main Для Bob: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -m 'code: добавлен вывод минимума' [main 29109c5] code: добавлен вывод минимума 1 file changed, 4 insertions(+) ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git push To uit.mpei.ru:ZhalninVY/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'uit.mpei.ru:ZhalninVY/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. Удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. Загрузим коммит из удаленного хранилища и после отобразим историю всех веток: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git pull --ff-only ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 112ed02 (HEAD -> main) code: Вывод минимума | * 4384564 (origin/main, origin/HEAD) code: Вывод максимума |/ * a41a855 code: Вывод деления * 45cd4c1 code: Вывод произведения * 8f9bb60 git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы Можно видеть, что ветка main локального репозитария разошлась с веткой origin/main, то есть с веткой main на сервере. Переместим коммит Bobа поверх коммита Алисы, то есть поверх origin/main: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 112ed02... code: Вывод минимума hint: Resolve all conflicts manually, mark them as resolved with hint: "git add/rm ", then run "git rebase --continue". hint: You can instead skip this commit: run "git rebase --skip". hint: To abort and get back to the state before "git rebase", run "git rebase -- abort". Could not apply 112ed02... code: Вывод минимума Команда завершается с ошибкой, сообщающей о конфликте в main.cpp. Проверим статус репозитария: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git status On branch main Your branch is ahead of 'origin/main' by 1 commit. //Ваша ветвь опережает 'origin/main' на 1 коммит. (use "git push" to publish your local commits) nothing added to commit but untracked files present (use "git add" to track) Теперь разрешим конфликт в CodeBlocks и последобавляем файл в индекс, продолжаем прерванную операцию rebase: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git rebase --continue Проверяем, чтобы история хранилища была в надлежащем виде: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 2088abe (HEAD -> main, origin/main, origin/HEAD) code: добавлен вывод минимума * 9c53d6f code: добавлен вывод максимума * a502524 code: добавлен вывод частного * 3b58c8d code: добавлен вывод произведения * 0b0f71a git: добавлен файл игнорирования * 00a04ef code: добавлен вывод разности * cdfe6e6 code: добавлен вывод суммы * 1036577 code: добавлен ввод двух чисел * e80d54b build: добавлен файл проекта * 70a6613 code: заготовка программы 24) Использование веток Создадим ветку double: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double Переключимся на нее: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' Заменим тип переменных а и b на double и сделаем коммит: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (double) $ git add main.cpp ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (double) $ git commit -m 'code: изменение типа на double' [double 7b6ff11] code: изменение типа на double 1 file changed, 1 insertion(+), 1 deletion(-) Переключимся на ветку main: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. Синхронизируем ветку main «на машине Алисы» с сервером. ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 386 bytes | 38.00 KiB/s, done. From uit.mpei.ru:ZhalninVY/cs-lab02 9c53d6f..2088abe main -> origin/main Продвинем ветку main к скачанной версии: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating 9c53d6f..2088abe Fast-forward main.cpp | 4 ++++ 1 file changed, 4 insertions(+) Просмотрим историю всех веток. ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 7b6ff11 (double) code: изменение типа на double | * 2088abe (HEAD -> main, origin/main) code: добавлен вывод минимума |/ * 9c53d6f code: добавлен вывод максимума * a502524 code: добавлен вывод частного * 3b58c8d code: добавлен вывод произведения * 0b0f71a git: добавлен файл игнорирования * 00a04ef code: добавлен вывод разности * cdfe6e6 code: добавлен вывод суммы * 1036577 code: добавлен ввод двух чисел * e80d54b build: добавлен файл проекта * 70a6613 code: заготовка программы Сольем ветки double и main: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git merge double Auto-merging main.cpp Merge made by the 'ort' strategy. main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Просмотрим историю всех веток репозитария: ПК@DESKTOP-NNUUA3R MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * af1896d (HEAD -> main) Merge branch 'double' true |\ | * 7b6ff11 (double) code: изменение типа на double * | 2088abe (origin/main) code: добавлен вывод минимума |/ * 9c53d6f code: добавлен вывод максимума * a502524 code: добавлен вывод частного * 3b58c8d code: добавлен вывод произведения * 0b0f71a git: добавлен файл игнорирования * 00a04ef code: добавлен вывод разности * cdfe6e6 code: добавлен вывод суммы * 1036577 code: добавлен ввод двух чисел * e80d54b build: добавлен файл проекта * 70a6613 code: заготовка программы В результате слияния образуется специальный новый коммит (merge commit).