# Отчет по лабораторной работе № 2 «Система контроля версий Git» Выполнил: Тимошенко А.А. \ Группа: А-01-23 \ Проверил: Филатов С.А. 1. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ ``` 2. Просмотрел файлы в рабочем каталоге можно командой `ls` — пусто: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ ls mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ ``` 3. Создал каталоги Алисы и Боба, создал каталог `project`, изучил команду `cd` в процессе: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ mkdir alice mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ mkdir bob mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02 $ cd alice mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice $ mkdir project mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice $ cd project mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project $ cd .. mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice $ cd project mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project $ ``` 4. Инициализировал репозитарий: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/mapon/OneDrive/Рабочий стол/lab02lice/project/.git/ mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) ``` У меня имя ветки по умолчанию не настроено. Git создал ветку под названием `master`, что видно в приглашении терминала. Подсказка о смене ветки не появилась. Позже имя ветки будет изменено на `main` 5. Настраиваем имя пользователя и email ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git config user.name "Alice (TimoshenkoAA)" mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git config user.email "timoshenkoaa@mpei.ru" ``` 6. Просмотрим статус репозитария ``` $ git status On branch master No commits yet nothing to commit (create/copy files and use "git add" to track) ``` В ветке MASTER отсутствуют коммиты. 7. Добавим main.cpp и посмотрим статус репозитария ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git status On branch master 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 ``` Git status показывает, что в изменениях для следующего коммита присутствует новый файл main.cpp 8. Закоммитим main.cpp ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git commit -m 'code: заготовка программы' [master (root-commit) f218e95] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp ``` 9. Переименуем ветку из master в main Добавим под контроль версий файл проекта. И, соответственно, сразу создаём коммит "code:..." ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (master) $ git branch -m main mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add project.cbp warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main c236982] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp ``` 11. Создадим коммит с вводом чисел: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "code: Добавлена ввод" [main 68ce0a7] code: Добавлена ввод 1 file changed, 3 insertions(+), 2 deletions(-) ``` "16 deletions(-)" означает, что я стёр эти 16 строк подсказок от VS 12. Добавим в программу вывод суммы и сделаем коммит, а потом и разность: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add -u mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m:"code: Добавлена сумма" [main c0f111e] :code: Добавлена сумма 1 file changed, 1 insertion(+) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -a -m "code: Добавлена разность" [main 0c4bcdd] code: Добавлена разность 1 file changed, 2 insertions(+), 1 deletion(-) ``` 13. Создал файл .gitignore и занёс в него сначала "bin" и "obj" Между занесениями вводил git status Также внесём в git данный файл ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ nothing added to commit but untracked files present (use "git add" to track) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/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) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add .gitignore mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "git: Добавлен gitignore" [main b735c11] git: Добавлен gitignore 1 file changed, 2 insertions(+) create mode 100644 .gitignore ``` Теперь в git не будут заноситься каталог bin и obj 14. Посмотрим историю коммитов в трёх исполнениях Просто вывод, сжато и сжато+дерево ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log commit b735c118a2a74302e790b694203c252908ae3996 (HEAD -> main) Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:37:28 2024 +0300 git: Добавлен gitignore commit 0c4bcdd532e5b0c5741d667f1167704d89688002 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:21:50 2024 +0300 code: Добавлена разность commit c0f111e2b2743afe2f7ac078829e5d2f161faa57 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:19:18 2024 +0300 :code: Добавлена сумма commit 68ce0a749787cec2a85d5794cff09485136b19e9 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:11:56 2024 +0300 code: Добавлена ввод mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate b735c11 (HEAD -> main) git: Добавлен gitignore 0c4bcdd code: Добавлена разность c0f111e :code: Добавлена сумма 68ce0a7 code: Добавлена ввод c236982 build: добавлен файл проекта f218e95 code: заготовка программы mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * b735c11 (HEAD -> main) git: Добавлен gitignore * 0c4bcdd code: Добавлена разность * c0f111e :code: Добавлена сумма * 68ce0a7 code: Добавлена ввод * c236982 build: добавлен файл проекта * f218e95 code: заготовка программы ``` 15. Введём git log --stat и посмотрим, что он скажет относительно последнего коммита ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --stat commit b735c118a2a74302e790b694203c252908ae3996 (HEAD -> main) Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:37:28 2024 +0300 git: Добавлен gitignore .gitignore | 2 ++ 1 file changed, 2 insertions(+) ``` Показывается хэш коммита, кто его сделал, точное время создания коммита с часовым поясом, тема коммита, добавленный файл. Показывается, сколько файлов изменено и сколько строк в этом файле вставлено 16. Посмотрим коммиты с темой "build" и коммиты, относящиеся к project.cbp ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --grep "build:" commit c236982eb24750647df8c4a3d73fd30cf8490926 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 11:51:12 2024 +0300 build: добавлен файл проекта mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log -- project.cbp commit c236982eb24750647df8c4a3d73fd30cf8490926 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 11:51:12 2024 +0300 build: добавлен файл проекта ``` 17. Посмотрим предпоследний коммит тремя способами: c помощью HEAD, по имени ветви, по хэшу нужного коммита ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git show HEAD~1 commit 0c4bcdd532e5b0c5741d667f1167704d89688002 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:21:50 2024 +0300 code: Добавлена разность diff --git a/main.cpp b/main.cpp index 4364dbc..8435233 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'; } mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git show main~1 commit 0c4bcdd532e5b0c5741d667f1167704d89688002 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:21:50 2024 +0300 code: Добавлена разность diff --git a/main.cpp b/main.cpp index 4364dbc..8435233 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'; } mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git show 0c4bcdd commit 0c4bcdd532e5b0c5741d667f1167704d89688002 Author: Alice (TimoshenkoAA) Date: Sun Mar 31 12:21:50 2024 +0300 code: Добавлена разность diff --git a/main.cpp b/main.cpp index 4364dbc..8435233 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'; } ``` Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление 18. Добавим печать произведения в программу но не станем пока делать коммит Посмотрим изменения в рабочей копии ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index 8435233..f372c78 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'; } ``` Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление 19. Посмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности Для этого используем хэши этих коммитов, которые написаны сильно выше ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git diff f218e95 0c4bcdd diff --git a/main.cpp b/main.cpp index b4392ec..8435233 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,9 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } ``` f218e95 — хэш самого первого коммита, а 0c4bcdd — коммита вывода разности 20. Закоммитим изменения в рабочей копии (вывод произведения) ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "code: вывод произведения" [main 818e7f5] code: вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) ``` 21. Откатимся к предпоследнему коммиту: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at b735c11 git: Добавлен gitignore ``` 22. Добавим над функцией main() комментарий и Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD): ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout HEAD -- main.cpp ``` 23. Сгенерируем приватный ключ для gitea на сайте кафедры ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/mapon/.ssh/id_ed25519): ........ ``` 24. Запустим ssh-agent и загрузим ключ ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 581 mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ ssh-add Identity added: /c/Users/mapon/.ssh/id_ed25519 (mapon@notebook) ``` 25. После добавления открытого ключа в профиль на git сайта кафедры связываем локальный и удалённый репозитарий и отправляем всё в облако ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git remote add origin http://uit.mpei.ru/git/TimoshenkoAA/cs-lab02.git mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push -u origin main 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.31 KiB | 787.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/TimoshenkoAA/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. ``` 26. На машине Боба. Клонируем репозитарий с облака, указав URL и папку Перейдём в папку проекта ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob $ git clone http://uit.mpei.ru/git/TimoshenkoAA/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. ``` 27. Настроим локальный репозитарий для Боба Изменим имя пользователя и email ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git config user.name "Bob (TimoshenkoAA)" mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git config user.email "timoshenkoaa@mpei.ru" ``` 28. Добавим печать произведения, сделаем коммит и отправим на сервер ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git commit -m "code: Добавил произведение" [main dc066f8] code: Добавил произведение 1 file changed, 3 insertions(+), 1 deletion(-) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/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), 420 bytes | 420.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/TimoshenkoAA/cs-lab02.git b735c11..dc066f8 main -> main ``` 29. На машине Алисы загрузим изменения Боба ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 400 bytes | 14.00 KiB/s, done. From http://uit.mpei.ru/git/TimoshenkoAA/cs-lab02 b735c11..dc066f8 main -> origin/main mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * dc066f8 (origin/main) code: Добавил произведение * b735c11 (HEAD -> main) git: Добавлен gitignore * 0c4bcdd code: Добавлена разность * c0f111e :code: Добавлена сумма * 68ce0a7 code: Добавлена ввод * c236982 build: добавлен файл проекта * f218e95 code: заготовка программы gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main) $ git pull --ff-only You are not currently on a branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull ``` После введения первой команды земетим, что в рабочей копии изменений еще не произошло Просмотрим историю и увидим, ветка main отстает на один коммит от ветки origin/main (версии ветки main из удаленного репозитария под названием origin, то есть на сервере). Пододвинем Main к скачанной версии 29. Добавим в программу печать деления, сделаем коммит и отправим на сервер ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git commit -m "code: Добавил частное" [detached HEAD 47c4325] code: Добавил частное 1 file changed, 3 insertions(+), 2 deletions(-) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git push origin HEAD:main 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), 413 bytes | 413.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/TimoshenkoAA/cs-lab02.git dc066f8..47c4325 HEAD -> main ``` 30. У Алисы. Дополним программу печатью максимума, сделаем коммит и отправим на сервер ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git commit -m "code: Добавлена печать максимума" [detached HEAD cf6718a] code: Добавлена печать максимума 1 file changed, 4 insertions(+) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git push origin HEAD:main 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), 442 bytes | 442.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/TimoshenkoAA/cs-lab02.git 47c4325..cf6718a HEAD -> main ``` 31. На машине Боба: Не обновляя локальный репозитарий, добавим печать минимума, сделаем коммит и попытаемся отправить на сервер ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git commit -m "code: Добавлена печать минимума" [main 58348bb] code: Добавлена печать минимума 1 file changed, 1 deletion(-) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git push To http://uit.mpei.ru/git/TimoshenkoAA/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'http://uit.mpei.ru/git/TimoshenkoAA/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. ``` Видно, что Git не дайт этого сделать, так как коммит Боба основан не на последнем существующем коммите 32. Посмотрим всю историю коммитов, предварительно загрузим их ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git fetch remote: Enumerating objects: 8, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (6/6), done. remote: Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), 781 bytes | 12.00 KiB/s, done. From http://uit.mpei.ru/git/TimoshenkoAA/cs-lab02 dc066f8..cf6718a main -> origin/main mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 58348bb (HEAD -> main) code: Добавлена печать минимума | * cf6718a (origin/main, origin/HEAD) code: Добавлена печать максимума | * 47c4325 code: Добавил частное |/ * dc066f8 code: Добавил произведение * b735c11 git: Добавлен gitignore * 0c4bcdd code: Добавлена разность * c0f111e :code: Добавлена сумма * 68ce0a7 code: Добавлена ввод * c236982 build: добавлен файл проекта * f218e95 code: заготовка программы ``` Видно, что возник конфликт коммитов. Это можно понять по символам "|" перед последним удачно отправленным коммитом 33. Попытаемся перенести коммит Боба поверх коммита Алисы, то есть поверх origin/main ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 58348bb... 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". Could not apply 58348bb... code: Добавлена печать минимума ``` На что получаем сообщение о конфликте кода. Необходимо сначала привести код Боба к тому виду, как у Алисы, а потом добавлять его функцию Сделаем это вручную. 34. После изменения кода нужно добавить файл в индекс и продолжить прерванную операцию rebase, а также отправим изменения на сервер: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main|REBASE 1/1) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/bob/project (main|REBASE 1/1) $ git rebase --continue Successfully rebased and updated refs/heads/main. mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/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), 497 bytes | 497.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/TimoshenkoAA/cs-lab02.git cf6718a..e21f90e main -> main ``` 35. Перейдём на машину Алисы. Создадим ветку double и перейдём в неё ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git branch double mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout double Switched to branch 'double' mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (double) $ ``` Видим, что приглашение в командной строке изменилось. "(main)" стало "(double)" 36. Перейдём в ветку main, синхронзируем репозитарии и посмотрим историю: ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git checkout main Switched to branch 'main' mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ 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), 477 bytes | 14.00 KiB/s, done. From http://uit.mpei.ru/git/TimoshenkoAA/cs-lab02 cf6718a..e21f90e main -> origin/main mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git log --oneline --decorate --all --graph * dbeedcb (double) code: Изменён тип переменной | * cdf30fd (origin/main) code: Добавлена печать минимума |/ * 92284ce (HEAD -> main) code: Добавлена печать максимума * 22dd72f code: Добавил частное * fa9ce57 code: Добавил произведение * 20f7ad4 code: Вывод произведения * 47a638a git: Добавлен gitignore * 666c1db code: Вывод разности * 8420143 code: Теперь точно сумма * 8691b4c code: Добавлена сумма * ff38e89 biuld: добавлены файлы проекта * 6f61cde code: заготовка программы ``` Видим две вещи: 1) Версия кода Алисы не совпадает с версией кода Боба. Т.к. перед созданием ветки мы не сделали обновление локального репозитария 2) коммит с хэшем "dbeedcb", в котором мы меняли тип переменной в другой ветке 37. Сольём ветку double с главной ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main|REBASE 1/1) $ git merge double Updating 92284ce..dbeedcb Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ``` 38. Попытаемся отправить изменения на сервер Но т.к. существует конфликт версий, о котором я писал в шаге 36, получаем ошибку ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 'http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. If you want to integrate the remote changes, hint: use 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. ``` Для исправления переключлся в ветку double, добавил правки Боба, создал коммит и отправил на сервер ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout double Switched to branch 'double' M main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git add main.cpp mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git commit -m "code: Изменён тип переменной (double)" [double ad91778] code: Изменён тип переменной (double) 1 file changed, 6 insertions(+) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git checkout main Switched to branch 'main' Your branch and 'origin/main' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" if you want to integrate the remote branch with yours) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git merge double Updating dbeedcb..ad91778 Fast-forward main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git push Enumerating objects: 11, done. Counting objects: 100% (11/11), done. Delta compression using up to 8 threads Compressing objects: 100% (7/7), done. Writing objects: 100% (7/7), 802 bytes | 802.00 KiB/s, done. Total 7 (delta 5), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git cdf30fd..d77ebc2 main -> main ``` По причине того, что я не удалил коммит, который был сделан для кода бз правок Боба, но с изменением переменной Алисы, Он тоже загрузился на сервер, но его сразу перекрыл нужный. 39. Посмотрим историю всех веток репозитария ``` mapon@notebook MINGW64 ~/OneDrive/Рабочий стол/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * d77ebc2 (HEAD -> main, origin/main) merge branch 'main' of http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02 |\ * | ad91778 (double) code: Изменён тип переменной (double) * | dbeedcb code: Изменён тип переменной |/ * cdf30fd code: Добавлена печать минимума * 92284ce code: Добавлена печать максимума * 22dd72f code: Добавил частное * fa9ce57 code: Добавил произведение * 20f7ad4 code: Вывод произведения * 47a638a git: Добавлен gitignore * 666c1db code: Вывод разности * 8420143 code: Теперь точно сумма * 8691b4c code: Добавлена сумма * ff38e89 biuld: добавлены файлы проекта * 6f61cde code: заготовка программы ``` Видно, что два предпоследних коммита находятся в другой ветке А последний коммит — слияние веток