Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Рознатовский Т.А Группа: А-01-24 Проверил: Примечание: работа выполнялась на Windows. 1. Вход в терминал и создание структуры каталогов. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: timda@RADAR MINGW64 /d/Прога/lab02 $ Просмотрел файлы в рабочем каталоге: timda@RADAR MINGW64 /d/Прога/lab02 $ ls Создал каталоги Алисы и Боба, изучил команду "cd", создал каталог project в каталоге Алисы: timda@RADAR MINGW64 /d/Прога/lab02 $ mkdir alice mkdir bob timda@RADAR MINGW64 /d/Прога/lab02 $ cd bob timda@RADAR MINGW64 /d/Прога/lab02/bob $ cd .. timda@RADAR MINGW64 /d/Прога/lab02 $ cd alice timda@RADAR MINGW64 /d/Прога/lab02/alice $ mkdir project timda@RADAR MINGW64 /d/Прога/lab02/alice $ cd project 2. Инициализация репозитария и настройка Git. Инициализируем репозитарий в текущем каталоге (project): timda@RADAR MINGW64 /d/Прога/lab02/alice/project $ git init Initialized empty Git repository in D:/Прога/lab02/alice/project/.git/ timda@RADAR MINGW64 /d/Прога/lab02/alice/project (master) Поменяем имя ветки на main: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (master) $ git branch -m main timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ Посмотрим данные папки, где сделано git init: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ ls -A .git/ Настроим репозитарий Алисы, чтобы коммиты были от ее имени: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git config user.name 'Alice (RoznatovskyTA)' timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git config user.email 'qwertttt158@gmail.com' 3. Создание коммитов Запустим CodeBlocks и создадим проект в репозитарии Алисы. Имеем следующую структуру файлов и каталогов: lab02 ├── alice │ └── project <--------- текущий рабочий каталог │ ├── .git <--------- создан командой "git init" │ ├── bin <--------- создан CodeBlocks при сборке │ ├── obj <--------- (то же самое) │ ├── main.cpp <-- код программы │ └── project.cbp <-- файл проекта └── bob Вернемся в Git Bash, просмотрим состояние рабочей копии: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git status On branch main No commits yet Untracked files: (use "git add ..." to include in what will be committed) main.cpp project.cbp nothing added to commit but untracked files present (use "git add" to track) Добавим файл main.cpp в индекс: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git add main.cpp Посмотрим изменения: timda@RADAR MINGW64 /d/Прога/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) project.cbp Выполним коммит с файлом main.cpp: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) a061b1e] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp Добавим файл project.cbp в индекс и сделаем коммит с ним: timda@RADAR MINGW64 /d/Прога/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 timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 9cd9d22] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp 4. Создание коммитов с изменениями. Заменим тело функции main() на ввод двух чисел. timda@RADAR MINGW64 /d/Прога/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") Cпособ 1. Сначала выбрем файлы, изменения которых должны войти в коммит, затем сделаем коммит: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git add main.cpp git commit -m "code: вывод двух чисел" [main dd5e6d8] code: вывод двух чисел 1 file changed, 4 insertions(+), 2 deletions(-) Способ 2. Добавим в индекс все изменения, затем сделаем коммит. timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git add -u timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -m 'code: вывод суммы' [main ad77a65] code: вывод суммы 1 file changed, 1 insertion(+), 1 deletion(-) Добавим в программу вывод разности a и b. Способ 3. Добавим все изменения в индекс и сделаем коммит в один шаг. timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -a -m 'code: вывод разности' [main 59e3923] code: вывод разности 1 file changed, 2 insertions(+), 1 deletion(-) 5. Игнорирование файлов. Укажем Git игнорировать присутствие каталога bin. Для этого создадим в CodeBlocks новый файл (File → New... → Empty) и запишем в него строку: /bin. Выполнив git status, можно видеть, что каталог bin не отображается: timda@RADAR MINGW64 /d/Прога/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) Занесем в список игнорируемых каталоги bin и git и файлы *.layout: timda@RADAR MINGW64 /d/Прога/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: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git add .gitignore timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -a -m 'git: игнорирование' [main 2d08ddf] git: игнорирование 1 file changed, 3 insertions(+) create mode 100644 .gitignore 6. Просмотр истории. Пробуем команду git log: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log commit 2d08ddf43831e9f9a6f196d75a82c8760f1952ef (HEAD -> main) Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:36:49 2025 +0300 git: игнорирование commit 59e392362b5185a4895176c4bbac7a9188e4eca7 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:24:25 2025 +0300 code: вывод разности commit ad77a65533c16e41991988fe57e7a1a4d868a15a Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:22:23 2025 +0300 code: вывод суммы commit dd5e6d881a0e1fff89084f8ffc0152accff272a0 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:20:10 2025 +0300 code: вывод двух чисел commit 9cd9d22abac8e9b5fb268343405f1ae0d198785e Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:16:09 2025 +0300 build: добавлен файл проекта commit a061b1ed4fdceb40ead434119f31cd59938f0acc Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:15:01 2025 +0300 code: заготовка программы Пробуем команду git log --stat: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --stat commit 2d08ddf43831e9f9a6f196d75a82c8760f1952ef (HEAD -> main) Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:36:49 2025 +0300 git: игнорирование .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 59e392362b5185a4895176c4bbac7a9188e4eca7 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:24:25 2025 +0300 code: вывод разности main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ad77a65533c16e41991988fe57e7a1a4d868a15a Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:22:23 2025 +0300 code: вывод суммы main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dd5e6d881a0e1fff89084f8ffc0152accff272a0 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:20:10 2025 +0300 code: вывод двух чисел main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 9cd9d22abac8e9b5fb268343405f1ae0d198785e Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:16:09 2025 +0300 build: добавлен файл проекта project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit a061b1ed4fdceb40ead434119f31cd59938f0acc Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:15:01 2025 +0300 code: заготовка программы main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) Пробуем команду git log --oneline --decorate: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --oneline --decorate 2d08ddf (HEAD -> main) git: игнорирование 59e3923 code: вывод разности ad77a65 code: вывод суммы dd5e6d8 code: вывод двух чисел 9cd9d22 build: добавлен файл проекта a061b1e code: заготовка программы Пробуем команду git log --oneline --decorate --all --graph: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 2d08ddf (HEAD -> main) git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы Коммиты по теме build: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --grep "build:" commit 9cd9d22abac8e9b5fb268343405f1ae0d198785e Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:16:09 2025 +0300 build: добавлен файл проекта Коммиты затрагивающие project.cbp: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log -- project.cbp commit 9cd9d22abac8e9b5fb268343405f1ae0d198785e Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:16:09 2025 +0300 build: добавлен файл проекта Посмотрим коммит тремя способами: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git show HEAD commit 2d08ddf43831e9f9a6f196d75a82c8760f1952ef (HEAD -> main) Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:36:49 2025 +0300 git: игнорирование diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aecc882 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/project.depend timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git show main commit 2d08ddf43831e9f9a6f196d75a82c8760f1952ef (HEAD -> main) Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:36:49 2025 +0300 git: игнорирование diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aecc882 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/project.depend Посмотрим предпоследний коммит: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git show 59e3923 commit 59e392362b5185a4895176c4bbac7a9188e4eca7 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:24:25 2025 +0300 code: вывод разности diff --git a/main.cpp b/main.cpp index 800d68c..8611536 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: добавим печать произведения чисел, но не станем пока делать коммит. Используем команду git diff: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index 8611536..28ace4e 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,6 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n';<--- строки начинающиеся с - показывают удаленные строки, строки с + показывают добавленные } Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git diff HEAD~3 HEAD~1 diff --git a/main.cpp b/main.cpp index 1d79c77..8611536 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' + << "A - B = " << a - b << '\n'; } 7. Откат изменений. Выполним коммит произведения: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -a -m 'code: вывод произведения' [main 6179755] code: вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) Выполним откат изменений: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at 2d08ddf git: игнорирование Добавим над функцией main() комментарий: // you may type whatever you want Откатим этот файл к состоянию в последнем коммите: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git checkout HEAD -- main.cpp 8. Обмен кодом через удаленное хранилище. Зарегестрируемся на Git УИТ. Создал пару ключей: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/timda/.ssh/id_ed25519): y Enter passphrase for "y" (empty for no passphrase): Enter same passphrase again: Passphrases do not match. Try again. Enter passphrase for "y" (empty for no passphrase): Enter same passphrase again: Your identification has been saved in y Your public key has been saved in y.pub The key fingerprint is: SHA256:mraxrJ9CwtYohMk18eH0+V6tYXYB3xt+F3gwa/Ae6xQ timda@RADAR The key's randomart image is: +--[ED25519 256]--+ | ..o o o | | o+ o . = * | |o.. .o o E = | |oo . + B +| |.. o S. = * oo| |. = o o. + * o| | o o = . . . | | .o = | | .+* | +----[SHA256]-----+ timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 266 timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ ssh-add Identity added: /c/Users/timda/.ssh/id_ed25519 (timda@RADAR) Открытый ключ: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICseD55ZBOKkwn9wZ//2b14SfVbqNIoi3ZpzckSu1QUk timda@RADAR Скопировал открытый ключ и добавил в список открытых ключей своей учетной записи. timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ touch README.md timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git init Reinitialized existing Git repository in D:/Прога/lab02/alice/project/.git/ timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git checkout -b main fatal: a branch named 'main' already exists timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git add README.md timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -m "first commit" [main 81f6372] first commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git remote add origin git@uit.mpei.ru:RoznatovskyTA/cs-lab02.git timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git push -u origin main Enumerating objects: 21, done. Counting objects: 100% (21/21), done. Delta compression using up to 12 threads Compressing objects: 100% (18/18), done. Writing objects: 100% (21/21), 2.57 KiB | 1.29 MiB/s, done. Total 21 (delta 3), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:RoznatovskyTA/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. 8. Клонирование проекта сервера. Клонируем проект: timda@RADAR MINGW64 /d/Прога/lab02/bob $ git clone git@uit.mpei.ru:RoznatovskyTA/cs-lab02.git project Cloning into 'project'... remote: Enumerating objects: 21, done. remote: Counting objects: 100% (21/21), done. remote: Compressing objects: 100% (18/18), done. remote: Total 21 (delta 3), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (21/21), done. Resolving deltas: 100% (3/3), done. "На машине Боба" настроим Git, как это делалось для Алисы: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git config user.name 'Bob (RoznatovskyTA)' timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git config user.email 'qwertttt158@gmail.com' «На машине Боба» добавим в программу печать произведения чисел и сделаем коммит. Просмотрим последний коммит и убедимся, что он сделан от имени Боба. timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git commit -a -m 'code: печать произведения двух чисел' [main fb57f72] code: печать произведения двух чисел 1 file changed, 3 insertions(+), 2 deletions(-) timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git log commit fb57f725706450319ddeb7b836dd03381d680139 (HEAD -> main) Author: Bob (RoznatovskyTA) Date: Sat Apr 5 22:48:58 2025 +0300 code: печать произведения двух чисел commit 81f637256f66964cd2d014fed31c8f935bc4797b (origin/main, origin/HEAD) Author: Alice (RoznatovskyTA) Date: Sat Apr 5 22:13:42 2025 +0300 first commit commit 2d08ddf43831e9f9a6f196d75a82c8760f1952ef Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:36:49 2025 +0300 git: игнорирование commit 59e392362b5185a4895176c4bbac7a9188e4eca7 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:24:25 2025 +0300 code: вывод разности commit ad77a65533c16e41991988fe57e7a1a4d868a15a Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:22:23 2025 +0300 code: вывод суммы commit dd5e6d881a0e1fff89084f8ffc0152accff272a0 Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:20:10 2025 +0300 code: вывод двух чисел commit 9cd9d22abac8e9b5fb268343405f1ae0d198785e Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:16:09 2025 +0300 build: добавлен файл проекта commit a061b1ed4fdceb40ead434119f31cd59938f0acc Author: Alice (RoznatovskyTA) Date: Sat Apr 5 21:15:01 2025 +0300 code: заготовка программы Отправим коммит на сервер: timda@RADAR MINGW64 /d/Прога/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), 391 bytes | 391.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:RoznatovskyTA/cs-lab02.git 81f6372..fb57f72 main -> main «На машине Алисы» выполним загрузку изменений: timda@RADAR MINGW64 /d/Прога/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 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 371 bytes | 123.00 KiB/s, done. From uit.mpei.ru:RoznatovskyTA/cs-lab02 81f6372..fb57f72 main -> origin/main Просмотрим историю всех веток: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * fb57f72 (origin/main, origin/HEAD) code: печать произведения двух чисел * 81f6372 (HEAD -> main) first commit * 2d08ddf git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы Продвинем ветку main к скачанной версии: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git pull --ff-only Updating 81f6372..fb57f72 Fast-forward main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) «От имени Алисы» добавим в программу печать деления, сделаем коммит, отправим его на сервер и получим новую версию «на машине Боба»: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -a -m 'code: деление двух чисел' [main 074cac8] code: деление двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) timda@RADAR MINGW64 /d/Прога/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), 365 bytes | 365.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:RoznatovskyTA/cs-lab02.git fb57f72..074cac8 main -> main timda@RADAR MINGW64 /d/Прога/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 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 345 bytes | 69.00 KiB/s, done. From uit.mpei.ru:RoznatovskyTA/cs-lab02 fb57f72..074cac8 main -> origin/main timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 074cac8 (origin/main, origin/HEAD) code: деление двух чисел * fb57f72 (HEAD -> main) code: печать произведения двух чисел * 81f6372 first commit * 2d08ddf git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git pull --ff-only Updating fb57f72..074cac8 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 9. Разрешение конфликтов правок при совместной работе. «На машине Алисы» дополним программу печатью максимума, сделаем коммит и отправим его на сервер: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git commit -a -m 'code: печать максимума' [main 2cf34b7] code: печать максимума 1 file changed, 1 insertion(+) timda@RADAR MINGW64 /d/Прога/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), 383 bytes | 383.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:RoznatovskyTA/cs-lab02.git 074cac8..2cf34b7 main -> main «На машине Боба» дополним программу печатью минимума, сделаем коммит и попытаемся отправить его на сервер: timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git push To uit.mpei.ru:RoznatovskyTA/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'uit.mpei.ru:RoznatovskyTA/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. Как можно видеть, удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. «От лица Боба» загрузим коммиты из удаленного хранилища и отобразим историю всех веток: timda@RADAR MINGW64 /d/Прога/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 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 363 bytes | 72.00 KiB/s, done. From uit.mpei.ru:RoznatovskyTA/cs-lab02 074cac8..2cf34b7 main -> origin/main timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * d0cb43b (HEAD -> main) code: печать минимума | * 2cf34b7 (origin/main, origin/HEAD) code: печать максимума |/ * 074cac8 code: деление двух чисел * fb57f72 code: печать произведения двух чисел * 81f6372 first commit * 2d08ddf git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы Нужно поместить коммит Боба, поверх коммита Алисы: timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply d0cb43b... 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 d0cb43b... code: печать минимума Эта команда завершается с ошибкой, сообщающей о конфликте в main.cpp. Посмотрим состояние хранилища: timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main|REBASE 1/1) $ git status interactive rebase in progress; onto 2cf34b7 Last command done (1 command done): pick d0cb43b code: печать минимума No commands remaining. You are currently editing a commit while rebasing branch 'main' on '2cf34b7'. (use "git commit --amend" to amend the current commit) (use "git rebase --continue" once you are satisfied with your changes) Untracked files: (use "git add ..." to include in what will be committed) project.layout nothing added to commit but untracked files present (use "git add" to track) Git status говорит нам, что мы находимся в середине rebase, возник конфликт в main.cpp. Удалим метки конфликта, отредактируем код(включает правки Алисы и Боба), программа компилируется и работает. Добавил файл в индекс и продолжил прерванную операцию rebase: timda@RADAR MINGW64 /d/Прога/lab02/bob/project (main|REBASE 1/1) $ git add main.cpp git rebase --continue Successfully rebased and updated refs/heads/main. timda@RADAR MINGW64 /d/Прога/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) nothing added to commit but untracked files present (use "git add" to track) timda@RADAR MINGW64 /d/Прога/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), 371 bytes | 371.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:RoznatovskyTA/cs-lab02.git 2cf34b7..c271e1f main -> main 10. Использование веток. Создадим ветку double: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git branch double Переключимя на нее: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git checkout double Switched to branch 'double' timda@RADAR MINGW64 /d/Прога/lab02/alice/project (double) $ git commit -a -m 'code: переменные типа double' [double ad93547] code: переменные типа double 1 file changed, 1 insertion(+), 1 deletion(-) Переключимся на ветку main: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) Посмотрим историю всех веток: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * 3639c48 (double) code: переменные типа double * c271e1f (HEAD -> main, origin/main, origin/HEAD) code: печать минимума * 2cf34b7 code: печать максимума * 074cac8 code: деление двух чисел * fb57f72 code: печать произведения двух чисел * 81f6372 first commit * 2d08ddf git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы Сольем ветку double в main: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git merge double Updating c271e1f..3639c48 Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) История всех веток: timda@RADAR MINGW64 /d/Прога/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * 3639c48 (HEAD -> main, double) code: переменные типа double * c271e1f (origin/main, origin/HEAD) code: печать минимума * 2cf34b7 code: печать максимума * 074cac8 code: деление двух чисел * fb57f72 code: печать произведения двух чисел * 81f6372 first commit * 2d08ddf git: игнорирование * 59e3923 code: вывод разности * ad77a65 code: вывод суммы * dd5e6d8 code: вывод двух чисел * 9cd9d22 build: добавлен файл проекта * a061b1e code: заготовка программы