Отчет по лабораторной работе №2 "Система контроля версий Git" Выполнил Шестов Д.Н. Проверил Козлюк Д.А. На рабочем столе создаем каталог "lab02" и запускаем в нем Git Bash. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 / $ cd c Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c $ cd Users Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c/Users $ cd Шестов Денис bash: cd: too many arguments Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c/Users $ cd "Шестов Денис" Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~ $ cd Desktop Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop $ cd lab02 С помощью команды mkdir создаю каталоги alice и bob Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02 $ mkdir alice Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02 $ mkdir bob Переходим в каталог alice, создаем там подкаталог project, заходим в него в него и выходим обратно в алису. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02 $ cd alice Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice $ mkdir progect Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice $ cd progect Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect $ cd .. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice $ cd progect Инициализация репозитория В каталоге project инициализируем репозитарий Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect $ git init Initialized empty Git repository in C:/Users/Шестов Денис/Desktop/lab02/alice/progect/.git/ Настраиваем репозитарий Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git config user.name 'Alice(ShestovDN)' Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git config user.email 'ShestovDN@mpei.ru' Создание коммита Создем проект в репозитарии Алисы. Он имеет путь C:\Users\GSTQ\Desktop\lab02\alice вызов команды git status показывает файлы внутри проекта $ git config user.email 'ShestovDN@mpei.ru' Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git status On branch master No commits yet Untracked files: (use "git add ..." to include in what will be committed) bin/ main.cpp obj/ progect.cbp nothing added to commit but untracked files present (use "git add" to track) Файл main.cpp заносим под Git: Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git add main.cpp статус еще раз Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (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) bin/ obj/ progect.cbp новый файл меин появился выполняем первый коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git commit -m 'code: заготовка программы' [master (root-commit) 949b6ad] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp и меняем название ветки после первого коммита Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master) $ git branch -m main делаю коммит проекта и просматриваю изменение статуса Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git add progect.cbp warning: in the working copy of 'progect.cbp', LF will be replaced by CRLF the next time Git touches it Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git commit -m 'build: добавление проект' [main 1e415e0] build: добавление проект 1 file changed, 40 insertions(+) create mode 100644 progect.cbp Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (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") проект исчез ис списка неизвестных вайлов Изменяю код на ввод двух чисел #include using namespace std; int main(){ cout << "Enter A and B: "; int a, b; cin >> a >> b; return 0; } Делаем 3 коммита тремя способами. Сначала добавляю в код вывод суммы введенных чисел, затем делаю коммит, промежуточно посмотрев статус Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git add main.cpp Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Changes to be committed: (use "git restore --staged ..." to unstage) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ project.depend Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git commit -m "..." [main a2172dd] ... 1 file changed, 4 insertions(+), 2 deletions(-) Добавляем в код разность чисел и ее вывод, делаю коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git add -u ключ -u (updated) позволяет работать только с измененными файлами. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Changes to be committed: (use "git restore --staged ..." to unstage) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ project.depend Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git commit -m "..." [main 311567b] ... 1 file changed, 1 insertion(+) меняю код на тот что в методичке и делаю последний коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git commit -a -m "..." [main 08c8bb0] ... 1 file changed, 3 insertions(+), 1 deletion(-) Скрытие ненужного Сделаю системные каталоги bin и obj неотображаемыми в status. Создаю в проекте пустой файл, задаю ему имя .gitignore, пишу строку /bin, пересобираю и сохраняю проект. Теперь git status показывает следующее Шестов Денис@LAPTOP-T2VQPTS1 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: project.cbp Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ project.depend no changes added to commit (use "git add" and/or "git commit -a") видно, что бин пропал из списка скрываю obj Шестов Денис@LAPTOP-T2VQPTS1 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: project.cbp Untracked files: (use "git add ..." to include in what will be committed) .gitignore project.depend no changes added to commit (use "git add" and/or "git commit -a") делаю коммит с темой гит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git add .gitignore Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git commit -m "git" [main 47f9720] git 1 file changed, 3 insertions(+) create mode 100644 .gitignore просмотр изменений разными способами $ git log --stat commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main) после слова commit идет его полный хэш, по которому к нему в дальнейшем можно будет обратиться. Author: Alice(ShestovDN) автор коммита Date: Mon Mar 13 10:38:17 2023 +0300 Дата создания коммита, время местное с указанием отклонения по UTC. git main.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) два добавления и три удаления данных. commit 71248b044cf4b0d0ff85543773a2ef598a2f7a3d Author: Alice(ShestovDN) Date: Mon Mar 13 10:33:44 2023 +0300 code: Добавлен вывод разности файлов main.cpp | 1 + 1 file changed, 1 insertion(+) commit a0f4cab0833a71f49874ecf58db71f37a582cf9c Author: Alice(ShestovDN) Date: Mon Mar 13 10:30:06 2023 +0300 code: Добавлен вывод суммы чисел main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 1a7913c37026f930f7219fdad7e040007f688f67 Author: Alice(ShestovDN) Date: Mon Mar 13 10:17:57 2023 +0300 build: Добавлен файл проекта project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 83e242df8a39b03bfc4702a7f8162bf34028ab4d Author: Alice(ShestovDN) Date: Mon Mar 13 09:59:52 2023 +0300 code: Заготовка программы main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) второй способ Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate Сокращенная форма вывода: короткий хэш, нет данных о времени и авторе, на описание каждого коммита одна строка. 8bff39f (HEAD -> main) git 71248b0 code: Добавлен вывод разности файлов a0f4cab code: Добавлен вывод суммы чисел 1a7913c build: Добавлен файл проекта 83e242d code: Заготовка программы Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph опция all выводит историю для всех веток (у нас одна). graph показывает историю в виде графа, но из-за приоритета опции oneline эти графы сократились до одной звёздочки в каждой строке. * 8bff39f (HEAD -> main) git * 71248b0 code: Добавлен вывод разности файлов * a0f4cab code: Добавлен вывод суммы чисел * 1a7913c build: Добавлен файл проекта * 83e242d code: Заготовка программы поиск по изменениям Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit 1a7913c37026f930f7219fdad7e040007f688f67 Author: Alice(ShestovDN) Date: Mon Mar 13 10:17:57 2023 +0300 build: Добавлен файл проекта Если поиск связан с конкретной темой, она указывается в кавычках после опции grep Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "build:" commit 1a7913c37026f930f7219fdad7e040007f688f67 Author: Alice(ShestovDN) Date: Mon Mar 13 10:17:57 2023 +0300 build: Добавлен файл проекта просмотр предпоследнего коммита с помощью show Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main) $ git show HEAD~1 commit 08c8bb0b15043604b1b5882409d1c73ff5411760 Author: Alice(ShestovDN) Date: Mon Jun 5 15:46:48 2023 +0300 ... diff --git a/main.cpp b/main.cpp index 3414e57..ae24dab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout<> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' В этой строке произошло изменение, но она уже существовала до этого: убрана точка с запятой. + << "A * B = " << a * b << '\n'; Этой строки не было изначально, она была добавлена в этом изменении. return 0; } diff --git a/project.cbp b/project.cbp index 99bb702..34f06bc 100644 --- a/project.cbp +++ b/project.cbp @@ -32,6 +32,7 @@ + В .gitignore произошли изменения, ведь он скрывает bin и obj которые меняются после пересборки. Сообщим в качестве аргументов для функции diff хэши самого первого коммита и того, где была добавлена разность. В выводе будут все изменения между ними, без разделения на промежуточне коммиты, но отдельные для каждого файла Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff 83e242df8a39b03bfc4702a7f8162bf34028ab4d 71248b044cf4b0d0ff85543773a2ef598a2f7a3d diff --git a/main.cpp b/main.cpp index b4392ec..b73d0df 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,11 @@ #include - using namespace std; +int main(){ + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "a + b = " << a + b; + cout << "a - b = " << a - b; -int main() -{ - cout << "Hello world!" << endl; return 0; } diff --git a/project.cbp b/project.cbp new file mode 100644 index 0000000..99bb702 --- /dev/null +++ b/project.cbp @@ -0,0 +1,40 @@ + + + + + + Откат коммитов Сделаем коммит, зафиксировав добавление произведения Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "code: Добавлен вывод произведения" [main 6962d6d] code: Добавлен вывод произведения 2 files changed, 3 insertions(+), 1 deletion(-) Откатим коммит на один назад Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD~1 указывает, что нужный коммит за один шаг до текущего. Ключ --hard - удаление всех отслеживаемых файлов из ветки HEAD is now at 8bff39f code: Подкорректировано оформление Добавляю перед строкой int main(){ комментарий "//You may type here whatever you want :)" Пересобираю, сохраняю файл, откатываю до состояния предыдущего коммита Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ После нажатия ОК на предупредительном окне строка исчезает Подключение к серверу Настраиваю SSH Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-keygen Команда создаст пару ключей: открытый и закрытый. Закрытый ключ записывается в файл, для него я создаю и подтверждаю пароль. Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/GSTQ/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/GSTQ/.ssh/id_rsa Your public key has been saved in /c/Users/GSTQ/.ssh/id_rsa.pub The key fingerprint is: SHA256:MZfRrs4VPI3pl/xQ3AzI1lmhFcmUKfrTVsr2OcLpgMo Шестов Денис@LAPTOP-T2VQPTS1 The key's randomart image is: +---[RSA 3072]----+ | .o ooBB| | o=.*= | | o o+.=.+.| | + .B . *| | S o.=.+.| | o ooOo | | + o.o++.| | . . o .+ oo| | E ... .| +----[SHA256]-----+ ``` Запустим программу, предоставляющую доступ к ключам без подтверждения пароля каждый раз. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ eval `ssh-agent -s` Agent pid 1115 Терминал вернул идентификатор агента. Значит, он запущен. Загружаем ключ Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/GSTQ/.ssh/id_rsa: Ввожу пароль. Identity added: /c/Users/GSTQ/.ssh/id_rsa (Шестов Денис@LAPTOP-T2VQPTS1) Команда cat отображает содержимое файла в консоль Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ cat ~/.ssh/id_rsa.pub AAAAB3NzaC1yc2EAAAADAQABAAABgQDnyiCBBXbUbKE62QRyfw+BJObFTj9DdGja2AWSw/H8Mr1Ek2Qvg3yDbT3/dHu4u7EKco5gxSmEuGYB6jubBrtfN7g5oPYVpcbYY/ltDXUlpqpEp9j5TCSHvgvoKvocG843NmU9J230sgibaAqidjVrgBrapMRHoxAjpKfASkdVTkt084R9KBwucP7RU7tVRkLIgfJnJLm1nUf92DgjgaW4ExdEUH76n4Ah78tWZUyu78oTP7RWDnpnKGjF/whADTD8FLJwmZFrRaBmMFh1lHrNIFYmvaq7NC+Ekr+nm5mHN/uLGuSHONkFHQyQQVE1w8e4t5NLdas2pwQnXxLWe8J3wjPOfahgf/zOK1++ToYzPqZlZSfVWdK6o5LW7rDCzL/8ITA1FZ2GgZW2OMpzt2FrGCr3KcvgXe6WVoPA25IpEXHxlXV71ePEFQviaOimqYKT1QWLa/Le8b9GRgnGmYPuOTip62u+2MtZvzqEc8TPfDm7jWqL4Gqm8uNKlIcTkmk= Шестов Денис@LAPTOP-T2VQPTS1 Копирую этот ключ, перехожу на сайт Git UIT, Пользователь -> Настройки -> SSH/GPG ключи -> Управление SSH ключами -> Добавить ключ. Ввожу ключ, переименовываю его. Нажав на +, создаю новый репозитарий. Ввожу имя, настраиваю, подтверждаю создание. Выданы команды для активации, ввожу их в командную строку Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git remote add origin git@uit.mpei.ru:ShestovDN/cs-lab2.git push -u origin main The authenticity of host 'uit.mpei.ru (193.233.68.149)' can't be established. ED25519 key fingerprint is SHA256:Q5w0UKEzQKA3J6NyMtjwCLvtAykoxdugIXjx6NwU4NA. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Please type 'yes', 'no' or the fingerprint: yes Warning: Permanently added 'uit.mpei.ru' (ED25519) to the list of known hosts. Enumerating objects: 15, done. Counting objects: 100% (15/15), done. Delta compression using up to 12 threads Compressing objects: 100% (14/14), done. Writing objects: 100% (15/15), 2.11 KiB | 1.05 MiB/s, done. Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:ShestovDN/cs-lab2.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. После обновления проекта файлы появились в интерфейсе. Добавление нового пользователя Перехожу в каталог bob и запускаю bash для него. Клонирую проект Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob $ git clone git@uit.mpei.ru:ShestovDN/cs-lab02.git project Cloning into 'project'... Enter passphrase for key '/c/Users/GSTQ/.ssh/id_rsa': Введен пароль. remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (14/14), done. remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (15/15), done. Resolving deltas: 100% (2/2), done. Инициализирую Боба Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob $ cd project Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name 'Alice(ShestovDN)' Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email 'ShestovDN@mpei.ru' "На машине Боба" делаю коммит и отправляю его на сервер. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 390 bytes | 390.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 http://uit.mpei.ru/git/ShestovDN/cs-lab02.git 8bff39f..2d4cef2 main -> main От имени Алисы загружаю изменения Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch Enter passphrase for key '/c/Users/GSTQ/.ssh/id_rsa': 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), 370 bytes | 52.00 KiB/s, done. From uit.mpei.ru:ShestovDN/cs-lab02 8bff39f..2d4cef2 main -> origin/main История всех веток Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --graph --decorate --all * 2d4cef2 (origin/main) code: Возвращен вывод произведения * 8bff39f (HEAD -> main) code: Подкорректировано оформление * 71248b0 Добавлен вывод разности файлов * a0f4cab code: Добавлен вывод суммы чисел * 1a7913c build: Добавлен файл проекта * 83e242d code: Заготовка программы Продвигаю ветку main к скачанной версии Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating 8bff39f..2d4cef2 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) От имени Алисы в код был добавлен вывод деления. Теперь код выглядит так <...> cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; <...> ``` Добавляю изменение в область отслеживания Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u Делаю коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: Добавлен вывод деления' [main 380aa92] code: Добавлен вывод деления 1 file changed, 2 insertions(+), 1 deletion(-) Отправляю его на сервер Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 386 bytes | 386.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 http://uit.mpei.ru/git/ShestovDN/cs-lab02.git 2d4cef2..380aa92 main -> main получаю изменение "на машине Боба" Шестов Денис@LAPTOP-T2VQPTS1 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), 366 bytes | 40.00 KiB/s, done. From http://uit.mpei.ru/git/ShestovDN/cs-lab02 2d4cef2..380aa92 main -> origin/main Пододвигаю ветку Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git pull --ff-only Updating 2d4cef2..380aa92 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Устранение конфликтов правок "На машине Алисы" добавляю вывод максимума Отправляю в git Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u Коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: Добавлена печать максимума' [main f72cf38] code: Добавлена печать максимума 1 file changed, 2 insertions(+), 1 deletion(-) Отправка коммита на сервер Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 426 bytes | 426.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 http://uit.mpei.ru/git/ShestovDN/cs-lab02.git 380aa92..f72cf38 main -> main "На машине Боба" добавляю минимум и проделываю то же самое Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git add -u Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -m 'code: Добавлен вывод минимума' [main 5d9e81d] code: Добавлен вывод минимума 1 file changed, 2 insertions(+), 1 deletion(-) Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git push To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'http://uit.mpei.ru/git/ShestovDN/cs-lab02.git' hint: Updates were rejected because the remote contains work that you dо Обновления отклонены, так как на удаленном компьютере есть работа которой нет у вас. 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. Подгружаю изменения с сервера Шестов Денис@LAPTOP-T2VQPTS1 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), 406 bytes | 33.00 KiB/s, done. From http://uit.mpei.ru/git/ShestovDN/cs-lab02 380aa92..f72cf38 main -> origin/main Смотрю, что получилось Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --all --decorate --graph --oneline * 5d9e81d (HEAD -> main) code: Добавлен вывод минимума | * f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума |/ * 380aa92 code: Добавлен вывод разности от последнего обещго коммита исходят две ветви: на сервере лежит вывод максимума Алисы,в локальном репозитории лежит вывод минимума Боба (на сервере его нет!) * 2d4cef2 code: Возвращен вывод произведения * 8bff39f code: Подкорректировано оформление * 71248b0 Добавлен вывод разности файлов * a0f4cab code: Добавлен вывод суммы чисел * 1a7913c build: Добавлен файл проекта * 83e242d code: Заготовка программы Необходимо поместить коммит Боба на сервер поверх коммита Алисы (то есть восстановить линейную последовательность, чтобы коммит Боба основывался на коде, получившемся в результате коммита Алисы) Шестов Денис@LAPTOP-T2VQPTS1 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 5d9e81d... 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 5d9e81d... code: Добавлен вывод минимума Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ git status interactive rebase in progress; onto f72cf38 Last command done (1 command done): pick 5d9e81d code: Добавлен вывод минимума No commands remaining. You are currently rebasing branch 'main' on 'f72cf38'. В настоящее время вы пытаетесь переместить ветку main к f72cf38. (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: Необъединенные пути. В обоих случаях изменяется файл main.cpp. (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) main.exe main.o no changes added to commit (use "git add" and/or "git commit -a") Открываю "На машине Боба" проект и вижу, что место конфликта отображено в коде графически <<<<<<< HEAD << "Maximum between A and B = " << max(a,b); ======= << "Minimum between A and B = " << min(a,b); >>>>>>> 5d9e81d (code: Добавлен вывод минимума) Вручную редактирую код, убрав все системные подсказки и объединив правки Боба и Алисы. Пересобираю проект и проверяю. Работает. Продолжаю перемещение Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ git add main.cpp Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ git rebase --continue [detached HEAD a15ac7f] code: Добавлен вывод минимума (fix) 1 file changed, 2 insertions(+), 1 deletion(-) Successfully rebased and updated refs/heads/main. Теперь история линейна, доказывается просмотром log Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --all --decorate --graph --oneline * a15ac7f (HEAD -> main) code: Добавлен вывод минимума (fix) * f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума * 380aa92 code: Добавлен вывод разности * 2d4cef2 code: Возвращен вывод произведения * 8bff39f code: Подкорректировано оформление * 71248b0 Добавлен вывод разности файлов * a0f4cab code: Добавлен вывод суммы чисел * 1a7913c build: Добавлен файл проекта * 83e242d code: Заготовка программы Использование веток От имени Алисы создаю новую ветку, чтобы сделать в ней изменение типа переменных, не затрагивая при этом основную. Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) Переключаюсь на новую ветку Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' Изменяю в коде тип с int на double, пересобираю, заношу под Git все изменения отслеживаемых файлов Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double) $ git add -u Делаю коммит Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double) $ git commit -m 'code: Заменен тип переменных' [double 22beab3] code: Заменен тип переменных 1 file changed, 1 insertion(+), 1 deletion(-) Переключаюсь обратно на main Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. Сливаю временную ветку double и главную ветку main в одну (то есть присоединяю double к main) Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git merge double Updating f72cf38..22beab3 Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Коммичу факт слияния двух веток Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'branch: Слияние веток main и double' 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) .gitignore main.exe main.o project.depend project.layout nothing added to commit but untracked files present (use "git add" to track) Отправляю изменения на сервер Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 367 bytes | 367.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 http://uit.mpei.ru/git/ShestovDN/cs-lab02.git f72cf38..22beab3 main -> main Просматриваю историю Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --graph --decorate --all * 22beab3 (HEAD -> main, origin/main, double) code: Заменен тип переменных * f72cf38 code: Добавлена печать максимума * 380aa92 code: Добавлен вывод разности * 2d4cef2 code: Возвращен вывод произведения * 8bff39f code: Подкорректировано оформление * 71248b0 Добавлен вывод разности файлов * a0f4cab code: Добавлен вывод суммы чисел * 1a7913c build: Добавлен файл проекта * 83e242d code: Заготовка программы