diff --git a/Отчёт по лабораторной работе №2 «Система контроля версий Git» b/Отчёт по лабораторной работе №2 «Система контроля версий Git» new file mode 100644 index 0000000..90ad2d0 --- /dev/null +++ b/Отчёт по лабораторной работе №2 «Система контроля версий Git» @@ -0,0 +1,983 @@ +Отчёт по лабораторной работе №2 «Система контроля версий Git» + +Выполнила: Семёнова В.В. +Группа: А-01-24 + +1. Вход в терминал и создание структуры каталогов +Создаю на рабочем столе каталог lab02 и запускаю в нём Git Bash, выводится приглашение: +vikus@Nowutbook MINGW64 ~/Desktop/lab02 +$ +Смотрю файлы в рабочем каталоге с помощью команды ls, так как в каталоге пусто, ls ничего не выводит: +vikus@Nowutbook MINGW64 ~/Desktop/lab02 +$ ls +Создаю папки Алисы и Боба: +vikus@Nowutbook MINGW64 ~/Desktop/lab02 +$ mkdir alice + +vikus@Nowutbook MINGW64 ~/Desktop/lab02 +$ mkdir bob + +Перехожу в каталог Алисы с помощью команды cd и создаю в ней папку project. +vikus@Nowutbook MINGW64 ~/Desktop/lab02 +$ cd alice + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice +$ mkdir project +Выполняю вход в каталог cd, а после поднимаю на уровень выше cd .. и снова возвращаюсь в папку project +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice +$ cd project + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project +$ cd .. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice +$ cd project + +1. Инициализация репозитария и настройка Git +Инициализируем репозиторий в текущем каталоге project: +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project +$ git init +Initialized empty Git repository in C:/Users/vikus/Desktop/lab02/alice/project/.git/ + +К приглашению командной строки добавилось (master): имя текущий ветви Git. + +Меняю текущее имя ветви master на имя main. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (master) +$ git branch -m main + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.name 'Alice (SemionovaVV)' + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.email 'SemionovaVV@mpei.ru' + +2. Создание коммитов +Посмотрим состояние рабочей копии: +vikus@Nowutbook MINGW64 ~/Desktop/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) + +1 строка – говорит о том, что мы находимся на ветке main. +2 строка – говорит о том, что коммиты отсутствуют. +3, 5-6 строки – показывает файлы, которые не отслеживаются git. +4 строка – подсказывает, как создать коммит. +7 строка – подсказывает, что нет коммитом, но есть не отслеживаемые файлы, которые можно закоммитить. + +Добавим файл main.cpp в индекс, то есть в набор изменений, который войдет в очередной коммит: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/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 + project.depend + +Появилась строка с файлом, который можно добавить в коммит. +Выполним коммит с файлом main.cpp и коротким сообщением: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: заготовка программы' +[main (root-commit) 42dd034] code: заготовка программы + 1 file changed, 9 insertions(+) + create mode 100644 main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Untracked files: + (use "git add ..." to include in what will be committed) + bin/ + obj/ + project.cbp + project.depend + +nothing added to commit but untracked files present (use "git add" to track) + +Теперь добавим файл project.cbp, т.е. проделаем тот же самый алгоритм + +vikus@Nowutbook 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 + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes to be committed: + (use "git restore --staged ..." to unstage) + new file: project.cbp + +Untracked files: + (use "git add ..." to include in what will be committed) + bin/ + obj/ + project.depend + +Выполним коммит с файлом project.cbp и коротким сообщением + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'build: добавлен файл проекта' +[main ba860ff] build: добавлен файл проекта + 1 file changed, 40 insertions(+) + create mode 100644 project.cbp + +Меняю тело функции main() на ввод двух чисел, смотрю состояние репозитория: + +vikus@Nowutbook 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/ + project.depend + +no changes added to commit (use "git add" and/or "git commit -a") + +1 строка – говорит о том, что мы находимся на основной ветке. +2-4 строки – предлагают удалить изменения или обновить коммит. +5 - строка пишет, что файл main.cpp был изменен. +6-10 строки – не отслеживаемые файлы. + +Проделываем ряд изменений с кодом программы и делаем коммиты суммы и разности: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод суммы' +[main dcb4ced] code: вывод суммы + 1 file changed, 1 insertion(+), 1 deletion(-) + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод суммы' +[main 2915fd0] code: вывод суммы + 1 file changed, 2 deletions(-) + +3. Игнорирование файлов +Создаю в CodeBlocks файл .gitignore, где будут написаны названия файлов, которые нужно будет игнорировать. Данный файл также коммичу. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add .gitignore + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'git: игнорирование файлов' +[main 2c65a3f] git: игнорирование файлов + 1 file changed, 2 insertions(+) + +Проверяю, чтобы необходимые файлы и каталоги не отображались: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +nothing to commit, working tree clean + +4. Просмотр истории +Работа с журналом репозитария: +Команда git log --stat, которая показывает файлы, изменённые в коммитах: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --stat +commit 2c65a3fc17bf631759d4aeff8e70202b907244bb (HEAD -> main) +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:27:47 2025 +0300 + + git: игнорирование файлов + + .gitignore | 2 ++ + 1 file changed, 2 insertions(+) + +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit 5e36d4405b2f14b303d63c090380d88852feaac8 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:12:30 2025 +0300 + + code: вывод разности + + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --stat +commit 2c65a3fc17bf631759d4aeff8e70202b907244bb (HEAD -> main) +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:27:47 2025 +0300 + + git: игнорирование файлов + + .gitignore | 2 ++ + 1 file changed, 2 insertions(+) + +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit 5e36d4405b2f14b303d63c090380d88852feaac8 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:12:30 2025 +0300 + + code: вывод разности + + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +1 строка - хэш коммита +2 строка - автор +3 строка - дата и время создания +4 строка - комментарий +5 строка - файл, который был изменён, количество изменённых строчек +6 строчка - статистика изменений данных файлов + +Коммиты по теме build: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --grep 'build' +commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:47:33 2025 +0300 + + build: добавлен файл проекта + +Коммиты, затрагивающие project.cbp: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log -- project.cbp +commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:47:33 2025 +0300 + + build: добавлен файл проекта + +Просмотр коммитов: +Далее тремя эквивалентными способами просматриваем информацию о предпоследнем коммите. + +1. При помощи отступа на 1 коммит: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show HEAD~1 +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..5e56e04 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1 @@ ++/bin + +2. При помощи обращении к самой ветке main и отступу на 1 коммит: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show main~1 +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..5e56e04 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1 @@ ++/bin + +3. Обращаясь к коммиту через его хеш: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show e5f80c66587e57cf18989cfd1c2e330b1c50f207 +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..5e56e04 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1 @@ ++/bin + +Просмотр изменений + +Внесем изменения в main.cpp: добавим печать произведения чисел, но не станем пока делать коммит. +Просмотрим изменения в рабочей копии: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git diff +diff --git a/main.cpp b/main.cpp +index a44ba6c..1d83160 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -7,5 +7,6 @@ int main() { + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; ++ cout << "A * B = " << a * b << '\n'; + return 0; + } + +1 строка - файлы, которые сравнивает команда: a/main.cpp (старая версия файла) и b/main.cpp (новая версия файла). +2 строка - хэши старой и новой версий файла. +5 строка - в каких строках произошли изменения и количество строк в старом и новом файлах. +6 - 10 строка - показывает, что изменилось в строках, что осталось таким же. + +Изменения между самым первым коммитом и коммитом, добавляющим вывод разности: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git diff 2c65a3fc17bf631759d4aeff8e70202b907244bb 5e36d4405b2f14b303d63c090380d88852feaac8 +diff --git a/.gitignore b/.gitignore +deleted file mode 100644 +index 6da2eee..0000000 +--- a/.gitignore ++++ /dev/null +@@ -1,3 +0,0 @@ +-/bin +-/obj +-/*.depend + +5. Откат изменений + +Закоммитим изменения в рабочей копии (вывод произведения): + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод произведения' +[main 40551fb] code: вывод произведения + 1 file changed, 1 insertion(+) + +Вносим изменения в код, а потом откатываем их до состояния в определенном коммите с помощью команды git reset: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git reset --hard HEAD~1 +HEAD is now at 2c65a3f git: игнорирование файлов + +Добавим над функцией main() комментарий: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ # you may type whatever you want + +Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD): + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout HEAD -- main.cpp + +6. Обмен кодом через удаленное хранилище +Обмен кодом через удалённое хранилище. Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-keygen +Generating public/private ed25519 key pair. +Enter file in which to save the key (/c/Users/vikus/.ssh/id_ed25519): 1234 +Enter passphrase for "1234" (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in 1234 +Your public key has been saved in 1234.pub +The key fingerprint is: +SHA256:ypRpKMEbEL0SieVoWn1Q8Et8TO+ewp2rgZ+Mnx5GIXI vikus@Nowutbook +The key's randomart image is: ++--[ED25519 256]--+ +|+=. oo. . | +|+=.. + o . | +|.o*.o E + . | +|+..+ * * o | +|..o . * S . | +| . + = o o | +| + * = | +| = * . | +| .oO.. | ++----[SHA256]-----+ + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ eval $(ssh-agent -s) +Agent pid 2285 + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-add 1234 +Enter passphrase for 1234: +Identity added: 1234 (vikus@Nowutbook) + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ cat 1234.pub +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICRVe0rXqSg6WVUx/E8PgtfUYZ2yznmJxWDwGK5fqcCF vikus@Nowutbook + +Добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git remote add origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git + +vikus@Nowutbook MINGW64 ~/Desktop/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: 33, done. +Counting objects: 100% (33/33), done. +Delta compression using up to 12 threads +Compressing objects: 100% (30/30), done. +Writing objects: 100% (33/33), 3.78 KiB | 257.00 KiB/s, done. +Total 33 (delta 6), 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/SemionovaVV/cs-lab02.git + * [new branch] main -> main +branch 'main' set up to track 'origin/main'. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git remote -v +origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git (fetch) +origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git (push) + +Получение проекта с сервера +Предположим, к разработке проекта присоединяется Боб. Откроем рабочую копию с машины Боба: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob +$ git clone http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git project +Cloning into 'project'... +remote: Enumerating objects: 33, done. +remote: Counting objects: 100% (33/33), done. +remote: Compressing objects: 100% (30/30), done. +remote: Total 33 (delta 6), reused 0 (delta 0), pack-reused 0 +Receiving objects: 100% (33/33), done. +Resolving deltas: 100% (6/6), done. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob +$ cd project + +Настроим хранилище Боба: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.name 'Bob (SemionovaVV)' + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.email 'SemionovaVV@mpei.ru' + +7. Совместная работа над проектом без конфликтов правок +Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub. +«На машине Боба» добавляем в программу печать произведения чисел и делаем коммит: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git commit -m 'code: вывод произведения' +[main 8d6c19d] code: вывод произведения + 1 file changed, 1 insertion(+) + +Отправляем коммит на сервер: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 407 bytes | 407.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/SemionovaVV/cs-lab02.git + 2c65a3f..8d6c19d main -> main + +«На машине Алисы» (то есть в первом терминале, в каталоге alice/project) выполните загрузку изменений: + +vikus@Nowutbook 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), 387 bytes | 55.00 KiB/s, done. +From http://uit.mpei.ru/git/SemionovaVV/cs-lab02 + 2c65a3f..8d6c19d main -> origin/main + +Убедимся, что в рабочей копии изменений еще не произошло. +Для этого посмотрим историю всех веток: +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* 8d6c19d (origin/main, origin/HEAD) code: вывод произведения +* 2c65a3f (HEAD -> main) git: игнорирование файлов +* e5f80c6 git: игнорирование файлов +* 5e36d44 code: вывод разности +* 42776b6 code: вывод суммы +* f3bbc96 code: вывод суммы +* 804a394 code: вывод суммы +* 2915fd0 code: вывод суммы +* dcb4ced code: вывод суммы +* 7f26453 code: вывод суммы +* ba860ff build: добавлен файл проекта +* 42dd034 code: заготовка программы + +Как можно видеть, ветка main отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git pull --ff-only + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git merge +Updating 2c65a3f..8d6c19d +Fast-forward + main.cpp | 1 + + 1 file changed, 1 insertion(+) + +«От имени Алисы» добавляем в программу печать деления, а после коммит: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод деления' +[main ba49d4a] code: вывод деления + 1 file changed, 1 insertion(+) + +Загружаем изменения на сервер: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 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/SemionovaVV/cs-lab02.git + 8d6c19d..ba49d4a main -> main + +И получаем новую версию «на машине Боба: + +vikus@Nowutbook MINGW64 ~/Desktop/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 | 15.00 KiB/s, done. +From http://uit.mpei.ru/git/SemionovaVV/cs-lab02 + 8d6c19d..ba49d4a main -> origin/main + +Ветка main, как мы знаем, отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git pull --ff-only +Updating 8d6c19d..ba49d4a +Fast-forward + main.cpp | 1 + + 1 file changed, 1 insertion(+) + +8. Разрешение конфликтов правок при совместной работе +Далее, Алиса решает добавить в программу печать максимума из чисел, а Боб — минимума. +От лица Алисы, добавляем печать максимума: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод максимума' +[main 332378f] code: вывод максимума + 1 file changed, 1 insertion(+) + +Загружаем изменения на сервер от лица Алисы: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 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/SemionovaVV/cs-lab02.git + ba49d4a..332378f main -> main + +От лица Боб, добавляем печать минимума: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git commit -m 'code: вывод минимума' +[main 5d39356] code: вывод минимума + 1 file changed, 1 insertion(+) + +Загружаем изменения на сервер от лица Боба: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +To http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git + ! [rejected] main -> main (fetch first) +error: failed to push some refs to 'http://uit.mpei.ru/git/SemionovaVV/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. +Загрузим версию с сервера: + +vikus@Nowutbook MINGW64 ~/Desktop/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), 390 bytes | 16.00 KiB/s, done. +From http://uit.mpei.ru/git/SemionovaVV/cs-lab02 + ba49d4a..332378f main -> origin/main + +Можно видеть, что ветка main локального репозитария разошлась с веткой origin/main, то есть с веткой main на сервере. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git log --oneline --decorate --all --graph +* 5d39356 (HEAD -> main) code: вывод минимума +| * 332378f (origin/main, origin/HEAD) code: вывод максимума +|/ +* ba49d4a code: вывод деления +* 8d6c19d code: вывод произведения +* 2c65a3f git: игнорирование файлов +* e5f80c6 git: игнорирование файлов +* 5e36d44 code: вывод разности +* 42776b6 code: вывод суммы +* f3bbc96 code: вывод суммы +* 804a394 code: вывод суммы +* 2915fd0 code: вывод суммы +* dcb4ced code: вывод суммы +* 7f26453 code: вывод суммы +* ba860ff build: добавлен файл проекта +* 42dd034 code: заготовка программы + +Бобу нужно переместить свой коммит поверх коммита Алисы, то есть поверх origin/main: + +vikus@Nowutbook 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 5d39356... 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 5d39356... # code: вывод минимума + +Команда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue. + + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) +$ git add main.cpp + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) +$ git rebase --continue + +code: вывод минимума + +# Conflicts: +# main.cpp + +# Please enter the commit message for your changes. Lines starting +# with '#' will be ignored, and an empty message aborts the commit. +# +# interactive rebase in progress; onto 332378f +# Last command done (1 command done): +# pick 5d39356 # code: вывод минимума +# No commands remaining. +# You are currently rebasing branch 'main' on '332378f'. +# +# Changes to be committed: +# modified: main.cpp +# +# Untracked files: +# main.exe +# main.o +# +.git/COMMIT_EDITMSG [unix] (23:28 15/10/2025) 21,1 All +"~/Desktop/lab02/bob/project/.git/COMMIT_EDITMSG" [unix] 21L, 513B + +[detached HEAD bca6886] code: вывод минимума + 1 file changed, 3 insertions(+), 1 deletion(-) +Successfully rebased and updated refs/heads/main. + +Отправим изменения на сервер: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 411 bytes | 205.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/SemionovaVV/cs-lab02.git + 332378f..bca6886 main -> main + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git pull --ff-only +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), 391 bytes | 17.00 KiB/s, done. +From http://uit.mpei.ru/git/SemionovaVV/cs-lab02 + 332378f..bca6886 main -> origin/main +Updating 332378f..bca6886 +Fast-forward + main.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 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 +commit bca688623558340b5ecac204396b8866395357f5 (HEAD -> main, origin/main, orig +Author: Bob (SemionovaVV) +Date: Wed Oct 15 22:29:52 2025 +0300 + + code: вывод минимума + +commit 332378f3a9df4339e24ed807181a74a1b2fbb12d +Author: Alice (SemionovaVV) +Date: Wed Oct 15 22:25:41 2025 +0300 + + code: вывод максимума + +commit ba49d4ae3de51853bb9c75f4ddd3a060d533b2e2 +Author: Alice (SemionovaVV) +Date: Wed Oct 15 21:19:28 2025 +0300 + + code: вывод деления + +commit 8d6c19d6ad9a5f4ac0e27aa1dc25e9c955873259 +Author: Bob (SemionovaVV) +Date: Wed Oct 15 21:02:51 2025 +0300 + +:...skipping... +commit bca688623558340b5ecac204396b8866395357f5 (HEAD -> main, origin/main, orig +Author: Bob (SemionovaVV) +Date: Wed Oct 15 22:29:52 2025 +0300 + + code: вывод минимума + +commit 332378f3a9df4339e24ed807181a74a1b2fbb12d +Author: Alice (SemionovaVV) +Date: Wed Oct 15 22:25:41 2025 +0300 + + code: вывод максимума + +commit ba49d4ae3de51853bb9c75f4ddd3a060d533b2e2 +Author: Alice (SemionovaVV) +Date: Wed Oct 15 21:19:28 2025 +0300 + + code: вывод деления + +commit 8d6c19d6ad9a5f4ac0e27aa1dc25e9c955873259 +Author: Bob (SemionovaVV) +Date: Wed Oct 15 21:02:51 2025 +0300 + + code: вывод произведения + +commit 2c65a3fc17bf631759d4aeff8e70202b907244bb +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:27:47 2025 +0300 + + git: игнорирование файлов + +commit e5f80c66587e57cf18989cfd1c2e330b1c50f207 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:22:30 2025 +0300 + + git: игнорирование файлов + +commit 5e36d4405b2f14b303d63c090380d88852feaac8 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:12:30 2025 +0300 + + code: вывод разности + +commit 42776b65fe219c7f2abbe80c8bb3d33c71285fdd +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:10:46 2025 +0300 + + code: вывод суммы + +commit f3bbc9658b0ae08b25bad6ac3883c4822eb51774 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:09:45 2025 +0300 + + code: вывод суммы + +commit 804a3948d9da0cc8e034b46f476e245c79c9bdf3 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:06:28 2025 +0300 + + code: вывод суммы + +commit 2915fd09e333e2ae48c46af8f9737be77ec11dce +Author: Alice (SemionovaVV) +Date: Mon Oct 13 23:00:31 2025 +0300 + + code: вывод суммы + +commit dcb4ced5a1eac64ae7366e1c823911c5b9177fe2 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:58:06 2025 +0300 + + code: вывод суммы + +commit 7f264539ca8e0cbfce657726fb98f8fda7eb2d6a +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:55:20 2025 +0300 + + code: вывод суммы + +commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:47:33 2025 +0300 + + build: добавлен файл проекта + +commit 42dd0348fb14062e85bd9a758a2f883306bb2fb7 +Author: Alice (SemionovaVV) +Date: Mon Oct 13 22:36:13 2025 +0300 + + code: заготовка программы + +Получили желаемый результат. + +9. Использование веток +Пока Боб синхронизирует изменения, Алиса меняет целые числа на действительные, для этого создадим отдельную ветку double т.к. это может занять время. + +Переключаюсь с ветки main на ветку double: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git branch double + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout double +Switched to branch 'double' +Меняем тип данных и коммитим изменения в файле: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double) +$ git add main.cpp +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double) +$ git commit -m 'code: изменение типа данных' +[double a9a9a96] code: изменение типа данных + 1 file changed, 1 insertion(+), 1 deletion(-) + +Обратно переключаемся на ветку main: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double) +$ git checkout main +Switched to branch 'main' +Your branch is up to date with 'origin/main'. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git fetch + +Получаем одновременно две ветки: + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* 9b1dc3f (double) code: изменение типа данных +* bca6886 (HEAD -> main, origin/main, origin/HEAD) code: вывод минимума +* 332378f code: вывод максимума +* ba49d4a code: вывод деления +* 8d6c19d code: вывод произведения +* 2c65a3f git: игнорирование файлов +* e5f80c6 git: игнорирование файлов +* 5e36d44 code: вывод разности +* 42776b6 code: вывод суммы +* f3bbc96 code: вывод суммы +* 804a394 code: вывод суммы +* 2915fd0 code: вывод суммы +* dcb4ced code: вывод суммы +* 7f26453 code: вывод суммы +* ba860ff build: добавлен файл проекта +* 42dd034 code: заготовка программы + +Объединяем ветки double и main. Вносим последние изменения и загружаем на GitHub. + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git merge double +Updating bca6886..9b1dc3f +Fast-forward + main.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 402 bytes | 201.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/SemionovaVV/cs-lab02.git + bca6886..9b1dc3f main -> main +