Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Троянов Д.С. Группа: А-01-22 Проверил: Примечание: работа выполнялась на Windows. 1) Создал на рабочем столе каталог lab02.02 и запустил в нем Git Bash, приглашение: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ 2) Просмотрел файлы в рабочем каталоге можно командой "ls" - пусто: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ ls Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ 3) Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ mkdir alice Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ mkdir bob Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02 $ cd alice Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice $ mkdir project Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice $ cd project Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project $ cd .. Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice $ cd project Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project $ 4) Инициализировал репозитарий, изменил имя ветки и через команду ls -A увидел его наличие: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project $ git init Initialized empty Git repository in C:/Users/Даниил/Desktop/lab02.02/alice/project/ .git/ Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (master) $ ls -A .git/ Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (master) $ git branch -m master main Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ 5) Настроил репозитарий, чтобы коммиты были от моего имени: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git config user.name 'Alice (TroyanovDS)' Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git config user.email 'TroyanovDS@mpei.ru' 6) Запустил CodeBlocks и создал проект в репозитарии Алисы: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git status On branch main No commits yet (нет файлов для коммита) Untracked files: (В рабочей копии замечен файл, но Git его не отслеживает.) (use "git add ..." to include in what will be committed) main.cpp main.exe main.o project.cbp project.layout nothing added to commit but untracked files present (use "git add" to track) 7) Заношу файл main.cpp под Git Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/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 (Git начал отслеживать файл) Untracked files: (use "git add ..." to include in what will be committed) main.exe main.o project.cbp project.layout //Неотслеживаемые файлы 8) Закомитил файл main.cpp и короткое сообщение (в одинарных или двойных ковычках): Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) 36b4362 //хэш коммита] code: заготовка программы 1 file changed, 17 insertions(+) //Сводная статистика изменений create mode 100644 main.cpp 9) Добавил файл project.cbp в индекс, закомител его с комментарием: (Замечание: Во время выполнения задания первая моя попытка привела к вылету репозитария и все полетело, поэтому я начал заново все делать и забыл закоммитить файл project.cbp. В отчете я предоставил коммит этого файла при первой попытке выполнения задания. Прошу прощения за предоставленные неудобства) Даниил@DESKTOP-FBA8R1R 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 n ext time Git touches it Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 216d951] build: добавлен файл проекта 1 file changed, 31 insertions(+) create mode 100644 project.cbp 10) Использование команды $ git status после изменения файла main.cpp: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/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/ main.exe main.o obj/ project.layout //Неотслеживаемые файлы no changes added to commit (use "git add" and/or "git commit -a") При сравнении случаев, когда добавлялся новый файл, и когда изменился существующий, можно заметить, что в случае, когда файл был изменен после добавления в индекс, изменения необходимо закомитить отдельно. 11) 1 способ закомитить изменения: Выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m "code: code: Ввод переменных" [main 50bff83] code: code: Ввод переменных 1 file changed, 1 insertion(+), 1 deletion(-) 12) 2 способ закомитить изменения: Добавить в индекс все изменения, затем сделать коммит: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git add -u Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m "code: Вывод суммы" [main 974994b] code: Вывод суммы 1 file changed, 1 insertion(+), 1 deletion(-) 13) 3 способ закомитить изенения: Добавить все изменения в индекс и сделать коммит в один шаг: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -a -m "code: Вывод разницы и суммы" [main 7835a20] code: Вывод разницы и суммы 1 file changed, 2 insertions(+), 1 deletion(-) Удобен когда коммит меняет уже существующий файл. 14) Игнорирование файлов: Создаем файл в codeblocks с подпись /bin, /obj и /project.layout в разных строках Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/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: project.cbp Untracked files: (use "git add ..." to include in what will be committed) .gitignore main.o no changes added to commit (use "git add" and/or "git commit -a") Как можно заметить, бинарный файлы bin, obj и project.layout пропали. Закомитим файл игнорирования: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git add .gitignore Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m "git: "файл игнорирования" [main 8f9bb60] git: файл игнорирования Date: Mon Mar 13 10:57:03 2023 +0300 1 file changed, 2 insertions(+) create mode 100644 .gitignore 15) Просмотрел коммиты репозитария: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --stat commit 8f9bb60ac01d4739d072e22a8e6870aa6302d714 (HEAD -> main) Author: Alice (TroyanovDS) Date: Sun Mar 19 16:46:41 2023 +0300 git: Файл игнорирования .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 7835a20b2b1bcb15a4f88eefabb5d2b0bfbfed3b Author: Alice (TroyanovDS) Date: Sun Mar 19 16:37:15 2023 +0300 code: Вывод разницы и суммы main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 974994b8ee2887372bb22923deff0bf490304589 (хеш коммита) Author: Alice (TroyanovDS) (автор создания) Date: Sun Mar 19 16:35:58 2023 +0300 (дата создания) code: Вывод суммы Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --oneline --decorate 8f9bb60(HEAD -> main) git: файл игнорирования 7835a20 code: Вывод разницы и суммы 974994b code: Вывод суммы 50bff83 code: Ввод переменных 36b4362 code: заготовка программы Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --oneline --decorate --all --graph * 8f9bb60 (HEAD -> main) git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы Поиск коммита, затрагивающий project.cbp: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log -- project.cbp commit 216d951de10e0fe0f8ceb783c979a3ff5cf5b889 Author: Alice (TroyanovDS) Date: Sat Mar 11 21:39:43 2023 +0300 build: добавлен файл проекта Поиск коммита, название которого имеет тему "build:" : Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --grep "build: " commit 216d951de10e0fe0f8ceb783c979a3ff5cf5b889 Author: Alice (TroyanovDS) Date: Sat Mar 11 21:39:43 2023 +0300 build: добавлен файл проекта 16) Просмотр журнала: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git show HEAD commit 8f9bb60ac01d4739d072e22a8e6870aa6302d714 Author: Alice (TroyanovDS) Date: Sun Mar 19 16:46:41 2023 +0300 git: Файл игнорирования diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdcd1e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/project.layout \ No newline at end of file 17) Просмотр коммитов (предпоследнего коммита): 1. Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git show HEAD~1 commit 7835a20b2b1bcb15a4f88eefabb5d2b0bfbfed3b Author: Alice (TroyanovDS) Date: Sun Mar 19 16:37:15 2023 +0300 code: Вывод разницы и суммы diff --git a/main.cpp b/main.cpp index 690f74f..0007b54 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,5 @@ int main() int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; } 2. Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git show main~1 commit 7835a20b2b1bcb15a4f88eefabb5d2b0bfbfed3b Author: Alice (TroyanovDS) Date: Sun Mar 19 16:37:15 2023 +0300 code: Вывод разницы и суммы diff --git a/main.cpp b/main.cpp index 690f74f..0007b54 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,5 @@ int main() int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; } 3. Просмотр предпоследнего коммита через указание его хэша Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git show 7835a20 commit 7835a20b2b1bcb15a4f88eefabb5d2b0bfbfed3b Author: Alice (TroyanovDS) Date: Sun Mar 19 16:37:15 2023 +0300 code: Вывод разницы и суммы diff --git a/main.cpp b/main.cpp index 690f74f..0007b54 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,5 @@ int main() int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; } 18) Просмотр изменений: Просмотрим изменения рабочей копии: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff diff --git a/.gitignore b/.gitignore deleted file mode 100644 index bdcd1e7..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/bin (отсутствие строчки) -/obj (отсутствие строчки) -/project.layout (отсутствие строчки) \ No newline at end of file diff --git a/main.cpp b/main.cpp index 0afddc3..0007b54 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,5 @@ int main() int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n' << "A*B (отсутствие строчки) = " << a*b << '\n'; + cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; (добавление строчки) } Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git diff HEAD~2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdcd1e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/project.layout \ No newline at end of file diff --git a/main.cpp b/main.cpp index 690f74f..0007b54 100644 --- a/main.cpp +++ b/main.cpp @@ -8,5 +8,5 @@ int main() int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; } Просмотр разницы изменений двух комитов Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git diff 36b4362 7835a20 diff --git a/main.cpp b/main.cpp index b4392ec..0007b54 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'; } 19) Откат изменений Во-первых, закомитил изменения рабочей копии (вывод произведения) Далее делаем откат изменений к предыдущей версии Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git reset --hard HEAD~1 (HEAD~1 - коммит к которому откатывают изменения) HEAD is now at 8f9bb60 git: файл игнорирования или добавим комментарий над main() и откатим этот файл к состоянию в последнем коммите Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp 20) Создание пары ключей для доступа к серверу ssh-keygen Запустим агент, который работает в фоне и предоставляет ключи другим программам, в том числе git: eval $(ssh-agent -s) Далее скопировать открытый ключ при помощи команды cat ~/.ssh/id_rsa.pub и добавить в список открытых ключей своей учетной записи. 21)Создаем репозитарий под названием cs-lab02. Далее клонируем проект в каталог Bob: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob $ git clone git@uit.mpei.ru:TroyanovDS/cs-lab02.git project Далее переходим в каталог проекта (project): Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob $ cd project После настраиваем git конфиг как с Alice: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git config user.name 'Bob (TroyanovDS)' Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git config user.email 'TroyanovDS@mpei.ru' 22)Совместная работа над проектом без конфликтов правок: «На машине Боба» добавляем в программу печать произведения чисел и делаем коммит: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git commit -m "code: Вывод произведения" [main 45cd4c1] code: Вывод произведения 1 file changed, 1 insertion(+), 1 deletion(-) Отправляем коммит на сервер: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git push «На машине Алисы» выполнить загрузку изменений: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git fetch Просмотрим историю всех веток: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --oneline --decorate --all --graph * 45cd4c1 (origin/main) code: Вывод произведения * 8f9bb60 (HEAD -> main) git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы Как можно видеть, ветка main отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git pull --ff-only Updating 8f9bb60..45cd4c1 Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 23)Разрешение конфликтов при совместной работе Дополним у Alice вывод максимума, у Bob - вывод минимума, попробуем сделать коммит и отправить его на сервер: Для Alice: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git commit -m "code: Вывод максимума" [main 4384564] code: Вывод максимума 1 file changed, 9 insertions(+) Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 398 bytes | 398.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:TroyanovDS/cs-lab02.git a41a855..4384564 main -> main Для Bob: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git commit -m "code: Вывод минимума" [main 112ed02] code: Вывод минимума 1 file changed, 9 insertions(+) Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git push Enter passphrase for key '/c/Users/Даниил/.ssh/id_rsa': To uit.mpei.ru:TroyanovDS/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'uit.mpei.ru:TroyanovDS/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. Удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. Загрузим коммит из удаленного хранилища и после отобразим историю всех веток: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git pull --ff-only Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git log --oneline --decorate --all --graph * 112ed02 (HEAD -> main) code: Вывод минимума | * 4384564 (origin/main, origin/HEAD) code: Вывод максимума |/ * a41a855 code: Вывод деления * 45cd4c1 code: Вывод произведения * 8f9bb60 git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы Можно видеть, что ветка main локального репозитария разошлась с веткой origin/main, то есть с веткой main на сервере. Переместим коммит Bobа поверх коммита Алисы, то есть поверх origin/main: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 112ed02... 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 112ed02... code: Вывод минимума Команда завершается с ошибкой, сообщающей о конфликте в main.cpp. Проверим статус репозитария: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git status On branch main Your branch is ahead of 'origin/main' by 1 commit. //Ваша ветвь опережает 'origin/main' на 1 коммит. (use "git push" to publish your local commits) Untracked files: //Неотслеживаемые файлы (use "git add ..." to include in what will be committed) main.exe main.o nothing added to commit but untracked files present (use "git add" to track) Теперь разрешим конфликт в CodeBlocks и последобавляем файл в индекс, продолжаем прерванную операцию rebase: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git rebase --continue Проверяем, чтобы история хранилища была в надлежащем виде: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/bob/project (main) $ git log --oneline --decorate --all --graph * ef95f84 (HEAD -> main, origin/main, origin/HEAD) code: Вывод минимума * 4384564 code: Вывод максимума * a41a855 code: Вывод деления * 45cd4c1 code: Вывод произведения * 8f9bb60 git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы 24) Использование веток Создадим ветку double: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git branch double Переключимся на нее: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git checkout double Switched to branch 'double' Заменим тип переменных а и b на double и сделаем коммит: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (double) $ git add main.cpp Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (double) $ git commit -m "code: Изменение типа на double" [double b279aed] code: Изменение типа на double 1 file changed, 1 insertion(+), 1 deletion(-) Переключимся на ветку main: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. Синхронизируем ветку main «на машине Алисы» с сервером. Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/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), 347 bytes | 11.00 KiB/s, done. From uit.mpei.ru:TroyanovDS/cs-lab02 4384564..ef95f84 main -> origin/main Продвинем ветку main к скачанной версии: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git pull --ff-only Updating 4384564..ef95f84 Fast-forward main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) Просмотрим историю всех веток. Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --oneline --decorate --all --graph * b279aed (double) code: Изменение типа на double | * ef95f84 (HEAD -> main, origin/main) code: Вывод минимума |/ * 4384564 code: Вывод максимума * a41a855 code: Вывод деления * 45cd4c1 code: Вывод произведения * 8f9bb60 git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы Сольем ветки double и main: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git merge double Auto-merging main.cpp Merge made by the 'ort' strategy. main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Просмотрим историю всех веток репозитария: Даниил@DESKTOP-FBA8R1R MINGW64 ~/Desktop/lab02.02/alice/project (main) $ git log --oneline --decorate --all --graph * 91e8d65 (HEAD -> main) Merge branch 'double' |\ | * b279aed (double) code: Изменение типа на double * | ef95f84 (origin/main) code: Вывод минимума |/ * 4384564 code: Вывод максимума * a41a855 code: Вывод деления * 45cd4c1 code: Вывод произведения * 8f9bb60 git: Файл игнорирования * 7835a20 code: Вывод разницы и суммы * 974994b code: Вывод суммы * 50bff83 code: Ввод переменных * 36b4362 code: заготовка программы В результате слияния образуется специальный новый коммит (merge commit).