Федеральное государственное бюджетное образовательное учреждение высшего образования «Национальный исследовательский университет «МЭИ» Институт информационных и вычислительных технологий Кафедра Управления и интеллектуальных технологий Дисциплина: Разработка программного обеспечения систем управления Лабораторная работа №2 Система контроля версий Git Выполнила студентка группы А-03-24 Пяпиева Айлана Витальевна Проверил Козлюк Дмитрий Александрович Москва 2025 Цель работы 1. Знать понятия и компоненты систем контроля версий (СКВ), порядок и приемы работы с ними. 2. Уметь участвовать в командной разработке, используя конкретную СКВ — Git, а также типовой web-интерфейс Gitea. Ход работы Вход в терминал и создание структуры каталогов Создаем папки пользователей (mkdir alice, mkdir bob) В папке пользователя alice создаем папку project Инициализация репозитария и настройка Git Инициализируем хранилище git (git init) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git init Initialized empty Git repository in C:/Users/pyapi/OneDrive/Рабочий стол/lab02/alice/project/.git/ Настраиваем папки пользователя, с которым будем работать: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git config user.name 'Alice (PyapievaAV)' pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабоий стол/lab02/alice/project (master) $ git config user.email 'PiapiyevaAV@mpei.ru' Создание коммитов: Занесение файлов под контроль версий Просматриваем состояние рабочей копии(git status) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main No commits yet Untracked files: (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) В первой строке надпись означает, что мы сейчас находимся в ветке с именем main и все новые коммиты будут добавляться именно в эту ветку Вторая стр. говорит о том, что еще не было создано коммитов Третья стр. показывает не отслеживаемые файлы в хранилище git, и подсказывает как их добавить Последняя стр. говорит о том, что нет добавленных (отслеживаемых) файлов, которые можно будет закоммитить Добавляем файл с кодом и просматриваем изменения pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ project.cbp Появилась строка с файлами в индексе, стоящими в очереди на коммит Составление сообщений к коммитам Создаем 2 коммита с информацией о коде программы pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) abf5030] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/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 pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 994d8ff] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp После добавления в программу ввода 2х чисел видим, что файл main.cpp был изменен pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/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") Проделываем изменения с кодом программы и делаем коммит первым способом pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'code: добавлена сумма а и б' [main bb4241b] code: добавлена сумма а и б 1 file changed, 3 insertions(+), 1 deletion(-) Игнорирование файлов pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ nothing added to commit but untracked files present (use "git add" to track) Создадим новый пустой файл под названием “.gitignore” и впишем “/bin”: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ project.depend nothing added to commit but untracked files present (use "git add" to track) Далее внесем остальные каталоги и файлы в “.gitignore”: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main nothing to commit, working tree clean Теперь создадим коммит с .gitignore, тема — git: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add .gitignore pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'git: создан коммит' [main ad49237] git: создан коммит 1 file changed, 3 insertions(+) create mode 100644 .gitignore Просмотр истории С помощью команды git log и различных ее опций просматриваем журнал коммитов Используем команду git log –stat pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --stat commit ad49237d2c9f932d2e4129126ef7c57e4fe409e8 (HEAD -> main) commit ad49237d2c9f932d2e4129126ef7c57e4fe409e8 (HEAD -> main) Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 23:17:02 2025 +0300 git: создан коммит .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit bb2825269072f08b99988f24a2c215b043d60409 Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 22:59:06 2025 +0300 code: добавлена сумма а и б main.cpp | 1 + 1 file changed, 1 insertion(+) В последнем коммите первой строкой показывается хэш коммита, по которому можно потом найти этот коммит Во 2 стр. записан автор, внесший этот коммит, а стр. ниже – время создания коммита Далее идет комментарий к коммиту Перечисление файлов, в которых произошли изменения и кол-во измененных строчек(“+” добавленная стр., “-” удаленная стр.) В последней стр. приведена статистика изменений данных файлов Используем команды для просмотра отдельных коммитов (git log –main.cpp/ git log –grep “code: ”) Найдем коммиты по теме “build”: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --grep "build:" commit 994d8ff835893c46320c8948108615012a8d0651 Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 22:46:50 2025 +0300 build: добавлен файл проекта Теперь коммиты, затрагивающие “project.cbp”: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log -- project.cbp commit 994d8ff835893c46320c8948108615012a8d0651 Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 22:46:50 2025 +0300 build: добавлен файл проекта (Таким способом мы просмотрели информацию о коммите по измененному файлу и по теме коммита) Просмотр коммитов Просмотрим тремя способами информацию о последнем коммите (результат всех способов один, поэтому в отчете не повторялся) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git show HEAD commit ad49237d2c9f932d2e4129126ef7c57e4fe409e8 (HEAD -> main) Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 23:17:02 2025 +0300 git: создан коммит diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..60898a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj/ +/project.depend Далее также просматриваем информацию о предпоследнем коммите pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git show head~1 commit bb2825269072f08b99988f24a2c215b043d60409 Author: PiapiyevaAV@mpei.ru Date: Sat Mar 29 22:59:06 2025 +0300 code: добавлена сумма а и б diff --git a/main.cpp b/main.cpp index 03b22ce..867eb54 100644 --- a/main.cpp +++ b/main.cpp @@ -7,5 +7,6 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << a + b; return 0; } Просмотр изменений Добавим изменения в рабочую копию и посмотрим их с помощью команды git diff pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index 867eb54..2ed6802 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,6 @@ int main() int a, b; cin >> a >> b; cout << a + b; + cout << a*b; return 0; } В первой строке говорится что сравниваются две версии файла main.cpp (a/main.cpp – старая версия, b/main.cpp – новая версия). Во второй строке - хеши версий файла в Git (867eb54 и 2ed6802) и права доступа к файлу (100644) (обычный файл с правами чтения/записи) В третьей строке заголовок для старой версии файла (до изменений). В четвертой заголовок для новой версии файла (после изменений). Затем в пятой строке описание изменённого блока (-8,5 - в старой версии: 5 строк, начиная с 8-й строки, +8,6 - в новой версии: 6 строк, начиная с 8-й строки (добавилась 1 строка). Затем показан код и зеленым выделена добавленная строка. Откат изменений Вносим изменения в код, а потом откатываем их до состояния в опр.коммите с помощью команды git reset. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "code: добавлен вывод произведения" [main cb37078] code: добавлен вывод произведения 1 file changed, 1 insertion(+) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at a66d232 code: добавлен вывод разности двух чисел Теперь добавим над функцией main комментарий и уберем изменение другим способом — откатив этот файл к состоянию в последнем коммите pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout HEAD -- main.cpp Обмен кодом через удаленное хранилище Зарегистрируемся на Git УИТ Так как работа ведется не из университета и нет доступа к сети МЭИ, будем взаимодействовать с сервером по протоколу HTTP. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/pyapi/.ssh/id_ed25519): Created directory '/c/Users/pyapi/.ssh'. Enter passphrase for "/c/Users/pyapi/.ssh/id_ed25519" (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/pyapi/.ssh/id_ed25519 Your public key has been saved in /c/Users/pyapi/.ssh/id_ed25519.pub The key fingerprint is: SHA256:kmJ4Atoe6hGl7V5VGt40I0NF/4JRxD6c+AGdeBWCWvs pyapi@LAPTOP-H2THKBH4 The key's randomart image is: +--[ED25519 256]--+ | .oo*+oo. | | . =o=. | |. . +o*B.. | |.o+. .oOo=*. | |.o=.+ o+Soo.o. | | oo= ... E. | |.... . | |. o . | | . . | +----[SHA256]-----+ Также после этого отображаются уникальные данные для ключа. Поскольку в работе вводить пароль при каждом использовании ключа может быть неудобно, используем программу-агент, которую достаточно запустить перед началом работы: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/pyapi/.ssh/id_ed25519: Identity added: /c/Users/pyapi/.ssh/id_ed25519 (pyapi@LAPTOP-H2THKBH4) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKsmPZK/F79ySvyzABB3IxXyCyWqrbqD39Pj6becSBP pyapi@LAPTOP-H2THKBH4 Затем в настройках аккаунта Github нужно добавить публичный ключ. Теперь добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git remote set-url origin http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git $ git push -u origin main The authenticity of host 'github.com (140.82.121.3)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push -u origin main warning: auto-detection of host provider took too long (>2000ms) warning: see https://aka.ms/gcm/autodetect for more information. warning: use of unencrypted HTTP remote URLs is not recommended; see https://aka.ms/gcm/unsaferemotes for more information. Enumerating objects: 15, done. Counting objects: 100% (15/15), done. Delta compression using up to 4 threads Compressing objects: 100% (13/13), done. Writing objects: 100% (15/15), 2.04 KiB | 347.00 KiB/s, done. Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. К работе присоединяется боб. Клонируем репозитарий с помощью git clone. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob (master) $ git clone http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git project Cloning into 'project'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (13/13), done. remote: Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (15/15), done. Resolving deltas: 100% (1/1), done. Перейдем в каталог Боба: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob (master) $ cd project Настроим хранилище Боба: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git config user.email "PiapiyevaAV@mpei.ru" pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git config user.name "PiapiyevaAV" Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git commit -m "code: добавлен вывод произведения чисел" [main 5e5ebad] code: добавлен вывод произведения чисел 1 file changed, 2 insertions(+), 1 deletion(-) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 437 bytes | 437.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git ad49237..5e5ebad main -> main Обновляем версию программы у Алисы pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/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), 417 bytes | 19.00 KiB/s, done. From http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02 ad49237..5e5ebad main -> origin/main pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 5e5ebad (origin/main, origin/HEAD) code: добавлен вывод произведения чисел * ad49237 (HEAD -> main) git: создан коммит * bb28252 code: добавлена сумма а и б * bb4241b code: добавлена сумма а и б * 994d8ff build: добавлен файл проекта * abf5030 code: заготовка программы pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git pull --ff-only Updating ad49237..5e5ebad Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Далее Алиса вносит новое изменение, а Боб его скачивает: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "code: добавлен вывод деления а на b" [main 15d2800] code: добавлен вывод деления а на b 1 file changed, 1 insertion(+) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 417 bytes | 417.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git 5e5ebad..15d2800 main -> main pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/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), 397 bytes | 44.00 KiB/s, done. From http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02 5e5ebad..15d2800 main -> origin/main pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git pull --ff-only Updating 5e5ebad..15d2800 Fast-forward main.cpp | 1 + 1 file changed, 1 insertion(+) Теперь Алиса и Боб добавляют в программу печать максимума и минимума соответственно, а затем пробуют загрузить изменения на репозитарий на сервере. Алиса: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'code: добавлен максимум' [main e3a7493] code: добавлен максимум 1 file changed, 10 insertions(+), 1 deletion(-) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 471 bytes | 471.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git 22c82c5..e3a7493 main -> main Боб: pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git commit -m "code: добавлен минимум" [main 350301f] code: добавлен минимум 1 file changed, 9 insertions(+) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git push To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do not hint: have locally. This is usually caused by another repository pushing to hint: the same ref. If you want to integrate the remote changes, use hint: 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. Однако загрузить на сервер изменения получается только у Алисы потому, что Боб затем пытается загрузить версию, основанную на более старом коммите, чем самый новый коммит в репозитарии GitHub. Загрузим версию с сервера pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/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), 451 bytes | 56.00 KiB/s, done. From http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02 22c82c5..e3a7493 main -> origin/main pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 350301f (HEAD -> main) code: добавлен минимум | * e3a7493 (origin/main, origin/HEAD) code: добавлен максимум |/ * 22c82c5 code:добавлена разность а и b * 15d2800 code: добавлен вывод деления а на b * 5e5ebad code: добавлен вывод произведения чисел * ad49237 git: создан коммит * bb28252 code: добавлена сумма а и б * bb4241b code: добавлена сумма а и б * 994d8ff build: добавлен файл проекта * abf5030 code: заготовка программы (Ветка main раздвоилась.) Объединим коммиты Боба и Алисы, поместив коммит Боба выше с помощью комманды git rebase. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 350301f... 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". hint: Disable this message with "git config set advice.mergeConflict false" Could not apply 350301f... code: добавлен минимум Комманда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git rebase --continue fatal: no rebase in progress pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 2fe44de (HEAD -> main) code: добавлен минимум * e3a7493 (origin/main, origin/HEAD) code: добавлен максимум * 22c82c5 code:добавлена разность а и b * 15d2800 code: добавлен вывод деления а на b * 5e5ebad code: добавлен вывод произведения чисел * ad49237 git: создан коммит * bb28252 code: добавлена сумма а и б * bb4241b code: добавлена сумма а и б * 994d8ff build: добавлен файл проекта * abf5030 code: заготовка программы (Получили желаемый результат) Отправим изменения на сервер. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 410 bytes | 410.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git e3a7493..2fe44de main -> main В это время Алиса создаёт новую ветку (с помощью комманды git branch) для изменения типа переменных на вещественный. Начинает она с коммита, когда добавлена печать максимума. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git branch double pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout double Switched to branch 'double' pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (double) $ git add main.cpp pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (double) $ git commit -m 'code: изменен тип переменных' [double 5ac2d26] code: изменен тип переменных 1 file changed, 1 insertion(+), 1 deletion(-) Затем переключается на ветку main. И синхронизирует её pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git fetch --all pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git reset --hard origin/main HEAD is now at 2fe44de code: добавлен минимум pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 5ac2d26 (double) code: изменен тип переменных | * 2fe44de (HEAD -> main, origin/main, origin/HEAD) code: добавлен минимум |/ * e3a7493 code: добавлен максимум * 22c82c5 code:добавлена разность а и b * 15d2800 code: добавлен вывод деления а на b * 5e5ebad code: добавлен вывод произведения чисел * ad49237 git: создан коммит * bb28252 code: добавлена сумма а и б * bb4241b code: добавлена сумма а и б * 994d8ff build: добавлен файл проекта * abf5030 code: заготовка программы (Получаем одновременно две ветки) Объединяем их с помощью комманды git merge. Вносим последние изменения и загружаем на GitHub. $ git merge double Auto-merging project/project.cpp Merge made by the 'ort' strategy. project/project.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 4 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 590 bytes | 590.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/PiapiyevaAV/cs-lab02.git f7b6ce9..20bee54 main -> main pyapi@LAPTOP-H2THKBH4 MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --all --oneline --graph * 5197778 (HEAD -> main, origin/main, origin/HEAD) Merge branch 'double' |\ | * 5ac2d26 (double) code: изменен тип переменных * | 2fe44de code: добавлен минимум |/ * e3a7493 code: добавлен максимум * 22c82c5 code:добавлена разность а и b * 15d2800 code: добавлен вывод деления а на b * 5e5ebad code: добавлен вывод произведения чисел * ad49237 git: создан коммит * bb28252 code: добавлена сумма а и б * bb4241b code: добавлена сумма а и б * 994d8ff build: добавлен файл проекта * abf5030 code: заготовка программы