Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Андросов Д. С. Группа: А-03-24 Проверил: Козлюк Д. А. Примечание: работа выполнялась на Windows. 1. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ 2. Просмотрел файлы в рабочем каталоге можно командой "ls" --- пусто: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ ls Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ 3. Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ mkdir alice Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ mkdir bob Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ cd bob Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob $ cd .. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02 $ cd alice Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice $ mkdir project Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice $ ls project/ Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice $ cd project Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project $ 4. Инициализировал репозитарий: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project $ git init hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in C:/Users/Diman3000/Desktop/lab02/alice/project/.git/ Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (master) $ Поменяем имя ветки на main: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (master) $ git branch -m main Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ ls -A .git/ Настроим репозитарий Алисы, чтобы коммиты были от ее имени: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.name 'Alice (AndrosovDS)' Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.email 'AndrosovDS@mpei.ru' 5. Создание коммитов: Запустиv CodeBlocks и создадим проект в репозитарии Алисы Имеем следующую структуру файлов и каталогов: lab02 ├── alice │ └── project <--------- текущий рабочий каталог │ ├── .git <--------- создан командой "git init" │ ├── bin <--------- создан CodeBlocks при сборке │ ├── obj <--------- (то же самое) │ ├── main.cpp <-- код программы │ └── project.cbp <-- файл проекта └── bob Вернувшись в Git Bash, просмотрим состояние рабочей копии: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main <-- находимся на ветке 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) <-- Подтверждает, что ничего не было добавлено в область подготовленных файлов, но есть не отслеживаемые файлы. Добавим файл main.cpp в индекс: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp Посмотрим изменения: Diman3000@DESKTOP-5UPO29D 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 Выполним коммит с файлом main.cpp и коротким сообщением: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) eb352f8] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp Добавим файл project.cbp в индекс и сделаем коммит с ним, тема — build. Diman3000@DESKTOP-5UPO29D 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 Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: add project file' [main 95259f2] build: add project file 1 file changed, 40 insertions(+) create mode 100644 project.cbp Заменим тело функции main() на ввод двух чисел и посмотрим состояние репозитария: Diman3000@DESKTOP-5UPO29D 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 <-- Указывает, что файл 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") 1 способ коммита. Сначала выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "code: ввод двух чисел" [main 9b3e59b] code: ввод двух чисел 1 file changed, 3 insertions(+), 2 deletions(-) Добавил в программу вывод суммы a и b. 2 способ коммита. Добавить в индекс все изменения, затем сделать коммит: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "code: вывод суммы двух чисел" [main 579e11b] code: вывод суммы двух чисел 1 file changed, 1 insertion(+) Добавил в программу вывод разности a и b. 3 способ коммита. Добавить все изменения в индекс и сделать коммит в один шаг: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "code: вывод разности двух чисел" [main 0ccb145] code: вывод разности двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) 6. Игнорирование файлов: Укажем Git игнорировать присутствие каталога bin. Для этого создадим в CodeBlocks новый файл (File → New... → Empty) и запишем в него строку: /bin Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ project.layout nothing added to commit but untracked files present (use "git add" to track) bin не отображается Занесем в список игнорируемых каталоги bin и obj и файлы *.layout. Diman3000@DESKTOP-5UPO29D 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) Создадим коммит с .gitignore, тема — git Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git add .gitignore Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "git: игнорирование bin obj .layout" [main 0d5ee38] git: игнорирование bin obj .layout 1 file changed, 3 insertions(+) create mode 100644 .gitignore 7. Просмотр истории: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main) Author: Alice (AndrosovDS) Date: Sun Mar 16 12:26:46 2025 +0300 git: игнорирование bin obj .layout commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:18:34 2025 +0300 code: вывод разности двух чисел commit 579e11ba75a40370ec6d4f51e08df2f21f7952f3 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:17:08 2025 +0300 code: вывод суммы двух чисел commit 9b3e59be040524543ff7286b78562e7683db9302 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:15:21 2025 +0300 code: ввод двух чисел Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --stat commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main) --- коммит, хэш коммита, ветка HEAD указывает на ветку main Author: Alice (AndrosovDS) --- Автор Date: Sun Mar 16 12:26:46 2025 +0300 --- Дата git: игнорирование bin obj .layout --- Сообщение коммита .gitignore | 3 +++ --- изменен gitignore, добавлено 3 строки 1 file changed, 3 insertions(+) --- изменен 1 файл, добавлено 3 строки commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:18:34 2025 +0300 code: вывод разности двух чисел main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 579e11ba75a40370ec6d4f51e08df2f21f7952f3 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:17:08 2025 +0300 code: вывод суммы двух чисел Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate 0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout 0ccb145 code: вывод разности двух чисел 579e11b code: вывод суммы двух чисел 9b3e59b code: ввод двух чисел 95259f2 build: add project file eb352f8 code: заготовка программы Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout * 0ccb145 code: вывод разности двух чисел * 579e11b code: вывод суммы двух чисел * 9b3e59b code: ввод двух чисел * 95259f2 build: add project file * eb352f8 code: заготовка программы Коммиты по теме build Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $git log --grep "build:" commit 95259f299a9be05e4ac3416bc06881b075bc6147 Author: Alice (AndrosovDS) Date: Sun Mar 9 14:56:55 2025 +0300 build: add project file Коммиты, затрагивающие project.cbp Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit 95259f299a9be05e4ac3416bc06881b075bc6147 Author: Alice (AndrosovDS) Date: Sun Mar 9 14:56:55 2025 +0300 build: add project file Посмотрим коммит тремя способами. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main) Author: Alice (AndrosovDS) Date: Sun Mar 16 12:26:46 2025 +0300 git: игнорирование bin obj .layout diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main) Author: Alice (AndrosovDS) Date: Sun Mar 16 12:26:46 2025 +0300 git: игнорирование bin obj .layout diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout Посмотрим предпоследний коммит Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git show 0d5ee3840cf42d4bb597d7ff858272ca307600bd~1 commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1 Author: Alice (AndrosovDS) Date: Sun Mar 16 12:18:34 2025 +0300 code: вывод разности двух чисел diff --git a/main.cpp b/main.cpp index 4364dbc..fd75bba 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 = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } Внесем изменения в main.cpp: добавим печать произведения чисел, но не станем пока делать коммит. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp ->будет показана разница между двумя версиями файла main.cpp index fd75bba..91f8982 100644 --- a/main.cpp ->следующие строки относятся к старой версии файла main.cpp. Строки, начинающиеся с ---, берутся из версии “a”, то есть из зафиксированной версии. +++ b/main.cpp -> следующие строки относятся к новой версии файла main.cpp. Строки, начинающиеся с +++, берутся из версии “b”, то есть из текущей рабочей копии. @@ -8,5 +8,6 @@ int main() cout << "Enter A and B: "; int a, b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n'; -> Строка, начинающаяся с +: Это добавленная строка в новой версии файла main.cpp. Добавлена строка, которая выводит результат умножения A * B. } Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff HEAD~3 HEAD~1 diff --git a/main.cpp b/main.cpp index eac5055..fd75bba 100644 --- a/main.cpp +++ b/main.cpp @@ -7,4 +7,6 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } Коммит произведения Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "code: Вывод произведения двух чисел" [main aa40eec] code: Вывод произведения двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) 8. Откат изменений: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at 0d5ee38 git: игнорирование bin obj .layout Добавим над функцией main() комментарий: // you may type whatever you want Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp 9. Обмен кодом через удаленное хранилище Зарегистрировался на Git УИТ Создал пару ключей Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. ... Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 2025 Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/Diman3000/.ssh/id_ed25519: Identity added: /c/Users/Diman3000/.ssh/id_ed25519 (Diman3000@DESKTOP-5UPO29D) Открытый ключ: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDvMW7I5s1bRAVK0UBHjeQ11RESmyBGs7GQIUCBfegT5 Diman3000@DESKTOP-5UPO29D Скопировал открытый ключ и добавил в список открытых ключей своей учетной записи Создал репозитарий под названием cs-lab02 Соединение с сервером(Через http, работа выполнялась из дома, VPN МЭИ настроить не получилось) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git remote set-url origin http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git push -u origin main warning: use of unencrypted HTTP remote URLs is not recommended; see https://aka.ms/gcm/unsaferemotes for more information. Enumerating objects: 18, done. Counting objects: 100% (18/18), done. Delta compression using up to 16 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (18/18), 2.30 KiB | 393.00 KiB/s, done. Total 18 (delta 2), 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/AndrosovDS/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. Получение проекта с сервера Клонирование проекта: Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob $ git clone http://uit.mpei.ru/git/AndrosovDS/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. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob $ cd project "На машине Боба" настроил Git, как это делалось для Алисы Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name 'Bob (AndrosovDS)' Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email 'AndrosovDS@mpei.ru' «На машине Боба» добавил в программу печать произведения чисел и сделал коммит. Просмотрел последний коммит и убедился, что он сделан от имени Боба. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -a -m "code: печать произведения двух чисел" [main df8b691] code: печать произведения двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git log commit df8b691468f90eaa330fedeaf1176ff45f53fc00 (HEAD -> main) Author: Bob (AndrosovDS) Date: Sun Mar 16 14:03:09 2025 +0300 code: печать произведения двух чисел Отправил коммит на сервер Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 432 bytes | 432.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/AndrosovDS/cs-lab02.git 0d5ee38..df8b691 main -> main «На машине Алисы» выполнил загрузку изменений Diman3000@DESKTOP-5UPO29D 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), 412 bytes | 82.00 KiB/s, done. From http://uit.mpei.ru/git/AndrosovDS/cs-lab02 0d5ee38..df8b691 main -> origin/main Просмотрел историю всех веток Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * df8b691 (origin/main, origin/HEAD) code: печать произведения двух чисел * 0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout * 0ccb145 code: вывод разности двух чисел * 579e11b code: вывод суммы двух чисел * 9b3e59b code: ввод двух чисел * 95259f2 build: add project file * eb352f8 code: заготовка программы Продвинул ветку main к скачанной версии Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating 0d5ee38..df8b691 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) «От имени Алисы» добавил в программу печать деления, сделал коммит, отправил его на сервер и получил новую версию «на машине Боба». Иначе говоря, повторил шаги выше, поменяв местами роли Алисы и Боба. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "code: деление двух чисел" warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it [main 9d73a40] code: деление двух чисел 2 files changed, 3 insertions(+), 1 deletion(-) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 16 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 468 bytes | 468.00 KiB/s, done. Total 4 (delta 2), 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/AndrosovDS/cs-lab02.git df8b691..9d73a40 main -> main Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git pull remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (4/4), 448 bytes | 11.00 KiB/s, done. From http://uit.mpei.ru/git/AndrosovDS/cs-lab02 df8b691..9d73a40 main -> origin/main Updating df8b691..9d73a40 Fast-forward main.cpp | 3 ++- project.cbp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) 10. Разрешение конфликтов правок при совместной работе «На машине Алисы» дополнил программу печатью максимума, сделал коммит и отправил его на сервер. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "code: Печать максимума" [main 4be5e65] code: Печать максимума 1 file changed, 2 insertions(+), 1 deletion(-) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 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/AndrosovDS/cs-lab02.git 9d73a40..4be5e65 main -> main «На машине Боба» дополнил программу печатью минимума, сделал коммит и попытался отправить его на сервер. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -a -m "code: Печать минимума" [main 81a9926] code: Печать минимума 1 file changed, 2 insertions(+), 1 deletion(-) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git push To http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'http://uit.mpei.ru/git/AndrosovDS/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. Как можно видеть, удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. «От лица Боба» загрузил коммиты из удаленного хранилища и отобразил историю всех веток Diman3000@DESKTOP-5UPO29D 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 | 12.00 KiB/s, done. From http://uit.mpei.ru/git/AndrosovDS/cs-lab02 9d73a40..4be5e65 main -> origin/main Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 81a9926 (HEAD -> main) code: Печать минимума | * 4be5e65 (origin/main, origin/HEAD) code: Печать максимума |/ * 9d73a40 code: деление двух чисел * df8b691 code: печать произведения двух чисел * 0d5ee38 git: игнорирование bin obj .layout * 0ccb145 code: вывод разности двух чисел * 579e11b code: вывод суммы двух чисел * 9b3e59b code: ввод двух чисел * 95259f2 build: add project file * eb352f8 code: заготовка программы Нужно поместить коммит Боба, поверх коммита Алисы Diman3000@DESKTOP-5UPO29D 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 81a9926... 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 81a9926... code: Печать минимума Однако эта команда завершается с ошибкой, сообщающей о конфликте в main.cpp Посмотрим состояние хранилища Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ git status interactive rebase in progress; onto 4be5e65 -в данный момент выполняется rebase Last command done (1 command done): pick 81a9926 code: Печать минимума No commands remaining. You are currently rebasing branch 'main' on '4be5e65'. (fix conflicts and then run "git rebase --continue") (use "git rebase --skip" to skip this patch) (use "git rebase --abort" to check out the original branch) Unmerged paths: -конфликт слияния (use "git restore --staged ..." to unstage) (use "git add ..." to mark resolution) both modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) project.depend no changes added to commit (use "git add" and/or "git commit -a") git status говорит нам, что мы находимся в середине rebase, возник конфликт в main.cpp Удалил метки конфликта, отредактировал код(включает правки Алисы и Боба), программа компилируется и работает Добавил файл в индекс и продолжил прерванную операцию rebase [detached HEAD 1cc8709] code: Печать минимума 1 file changed, 2 insertions(+), 1 deletion(-) Successfully rebased and updated refs/heads/main. Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git status On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) Untracked files: (use "git add ..." to include in what will be committed) project.depend nothing added to commit but untracked files present (use "git add" to track) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 422 bytes | 422.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/AndrosovDS/cs-lab02.git 4be5e65..1cc8709 main -> main 11. Использование веток Создал ветку и переключился на нее Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' В коде заменил тип переменных a и b на double и сделал коммит Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (double) $ git commit -a -m "code: переменные типа double" [double 912a770] code: переменные типа double 1 file changed, 1 insertion(+), 1 deletion(-) Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * 912a770 (double) code: переменные типа double | * 1cc8709 (HEAD -> main, origin/main, origin/HEAD) code: Печать минимума |/ * 4be5e65 code: Печать максимума * 9d73a40 code: деление двух чисел * df8b691 code: печать произведения двух чисел * 0d5ee38 git: игнорирование bin obj .layout * 0ccb145 code: вывод разности двух чисел * 579e11b code: вывод суммы двух чисел * 9b3e59b code: ввод двух чисел * 95259f2 build: add project file * eb352f8 code: заготовка программы Слил ветку double в main Auto-merging main.cpp Merge made by the 'ort' strategy. main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) История всех веток Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * afabfb9 (HEAD -> main, origin/main, origin/HEAD) Merge branch 'double' |\ | * 912a770 (double) code: переменные типа double * | 1cc8709 code: Печать минимума |/ * 4be5e65 code: Печать максимума * 9d73a40 code: деление двух чисел * df8b691 code: печать произведения двух чисел * 0d5ee38 git: игнорирование bin obj .layout * 0ccb145 code: вывод разности двух чисел * 579e11b code: вывод суммы двух чисел * 9b3e59b code: ввод двух чисел * 95259f2 build: add project file * eb352f8 code: заготовка программы