Отчёт по лабораторной работе №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