Создал(а) 'Отчёт по лабораторной работе №2 «Система контроля версий Git»'

main
SemionovaVV 2 недель назад
Родитель 9b1dc3fcfb
Сommit f5a9e73efd

@ -0,0 +1,983 @@
Отчёт по лабораторной работе №2 «Система контроля версий Git»
Выполнила: Семёнова В.В.
Группа: А-01-24
1. Вход в терминал и создание структуры каталогов
Создаю на рабочем столе каталог lab02 и запускаю в нём Git Bash, выводится приглашение:
vikus@Nowutbook MINGW64 ~/Desktop/lab02
$
Смотрю файлы в рабочем каталоге с помощью команды ls, так как в каталоге пусто, ls ничего не выводит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02
$ ls
Создаю папки Алисы и Боба:
vikus@Nowutbook MINGW64 ~/Desktop/lab02
$ mkdir alice
vikus@Nowutbook MINGW64 ~/Desktop/lab02
$ mkdir bob
Перехожу в каталог Алисы с помощью команды cd и создаю в ней папку project.
vikus@Nowutbook MINGW64 ~/Desktop/lab02
$ cd alice
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice
$ mkdir project
Выполняю вход в каталог cd, а после поднимаю на уровень выше cd .. и снова возвращаюсь в папку project
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice
$ cd project
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project
$ cd ..
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice
$ cd project
1. Инициализация репозитария и настройка Git
Инициализируем репозиторий в текущем каталоге project:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project
$ git init
Initialized empty Git repository in C:/Users/vikus/Desktop/lab02/alice/project/.git/
К приглашению командной строки добавилось (master): имя текущий ветви Git.
Меняю текущее имя ветви master на имя main.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (master)
$ git branch -m main
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.name 'Alice (SemionovaVV)'
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.email 'SemionovaVV@mpei.ru'
2. Создание коммитов
Посмотрим состояние рабочей копии:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
main.cpp
obj/
project.cbp
nothing added to commit but untracked files present (use "git add" to track)
1 строка – говорит о том, что мы находимся на ветке main.
2 строка – говорит о том, что коммиты отсутствуют.
3, 5-6 строки – показывает файлы, которые не отслеживаются git.
4 строка – подсказывает, как создать коммит.
7 строка – подсказывает, что нет коммитом, но есть не отслеживаемые файлы, которые можно закоммитить.
Добавим файл main.cpp в индекс, то есть в набор изменений, который войдет в очередной коммит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.cbp
project.depend
Появилась строка с файлом, который можно добавить в коммит.
Выполним коммит с файлом main.cpp и коротким сообщением:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: заготовка программы'
[main (root-commit) 42dd034] code: заготовка программы
1 file changed, 9 insertions(+)
create mode 100644 main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.cbp
project.depend
nothing added to commit but untracked files present (use "git add" to track)
Теперь добавим файл project.cbp, т.е. проделаем тот же самый алгоритм
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add project.cbp
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: project.cbp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.depend
Выполним коммит с файлом project.cbp и коротким сообщением
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'build: добавлен файл проекта'
[main ba860ff] build: добавлен файл проекта
1 file changed, 40 insertions(+)
create mode 100644 project.cbp
Меняю тело функции main() на ввод двух чисел, смотрю состояние репозитория:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.depend
no changes added to commit (use "git add" and/or "git commit -a")
1 строка – говорит о том, что мы находимся на основной ветке.
2-4 строки – предлагают удалить изменения или обновить коммит.
5 - строка пишет, что файл main.cpp был изменен.
6-10 строки – не отслеживаемые файлы.
Проделываем ряд изменений с кодом программы и делаем коммиты суммы и разности:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод суммы'
[main dcb4ced] code: вывод суммы
1 file changed, 1 insertion(+), 1 deletion(-)
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод суммы'
[main 2915fd0] code: вывод суммы
1 file changed, 2 deletions(-)
3. Игнорирование файлов
Создаю в CodeBlocks файл .gitignore, где будут написаны названия файлов, которые нужно будет игнорировать. Данный файл также коммичу.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add .gitignore
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'git: игнорирование файлов'
[main 2c65a3f] git: игнорирование файлов
1 file changed, 2 insertions(+)
Проверяю, чтобы необходимые файлы и каталоги не отображались:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
nothing to commit, working tree clean
4. Просмотр истории
Работа с журналом репозитария:
Команда git log --stat, которая показывает файлы, изменённые в коммитах:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --stat
commit 2c65a3fc17bf631759d4aeff8e70202b907244bb (HEAD -> main)
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:27:47 2025 +0300
git: игнорирование файлов
.gitignore | 2 ++
1 file changed, 2 insertions(+)
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
.gitignore | 1 +
1 file changed, 1 insertion(+)
commit 5e36d4405b2f14b303d63c090380d88852feaac8
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:12:30 2025 +0300
code: вывод разности
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --stat
commit 2c65a3fc17bf631759d4aeff8e70202b907244bb (HEAD -> main)
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:27:47 2025 +0300
git: игнорирование файлов
.gitignore | 2 ++
1 file changed, 2 insertions(+)
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
.gitignore | 1 +
1 file changed, 1 insertion(+)
commit 5e36d4405b2f14b303d63c090380d88852feaac8
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:12:30 2025 +0300
code: вывод разности
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
1 строка - хэш коммита
2 строка - автор
3 строка - дата и время создания
4 строка - комментарий
5 строка - файл, который был изменён, количество изменённых строчек
6 строчка - статистика изменений данных файлов
Коммиты по теме build:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --grep 'build'
commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:47:33 2025 +0300
build: добавлен файл проекта
Коммиты, затрагивающие project.cbp:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log -- project.cbp
commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:47:33 2025 +0300
build: добавлен файл проекта
Просмотр коммитов:
Далее тремя эквивалентными способами просматриваем информацию о предпоследнем коммите.
1. При помощи отступа на 1 коммит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show HEAD~1
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin
2. При помощи обращении к самой ветке main и отступу на 1 коммит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show main~1
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin
3. Обращаясь к коммиту через его хеш:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show e5f80c66587e57cf18989cfd1c2e330b1c50f207
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bin
Просмотр изменений
Внесем изменения в main.cpp: добавим печать произведения чисел, но не станем пока делать коммит.
Просмотрим изменения в рабочей копии:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff
diff --git a/main.cpp b/main.cpp
index a44ba6c..1d83160 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main() {
cin >> a >> b;
cout << "A + B = " << a + b << '\n'
<< "A - B = " << a - b << '\n';
+ cout << "A * B = " << a * b << '\n';
return 0;
}
1 строка - файлы, которые сравнивает команда: a/main.cpp (старая версия файла) и b/main.cpp (новая версия файла).
2 строка - хэши старой и новой версий файла.
5 строка - в каких строках произошли изменения и количество строк в старом и новом файлах.
6 - 10 строка - показывает, что изменилось в строках, что осталось таким же.
Изменения между самым первым коммитом и коммитом, добавляющим вывод разности:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff 2c65a3fc17bf631759d4aeff8e70202b907244bb 5e36d4405b2f14b303d63c090380d88852feaac8
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 6da2eee..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/bin
-/obj
-/*.depend
5. Откат изменений
Закоммитим изменения в рабочей копии (вывод произведения):
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод произведения'
[main 40551fb] code: вывод произведения
1 file changed, 1 insertion(+)
Вносим изменения в код, а потом откатываем их до состояния в определенном коммите с помощью команды git reset:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git reset --hard HEAD~1
HEAD is now at 2c65a3f git: игнорирование файлов
Добавим над функцией main() комментарий:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ # you may type whatever you want
Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD):
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout HEAD -- main.cpp
6. Обмен кодом через удаленное хранилище
Обмен кодом через удалённое хранилище. Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/vikus/.ssh/id_ed25519): 1234
Enter passphrase for "1234" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in 1234
Your public key has been saved in 1234.pub
The key fingerprint is:
SHA256:ypRpKMEbEL0SieVoWn1Q8Et8TO+ewp2rgZ+Mnx5GIXI vikus@Nowutbook
The key's randomart image is:
+--[ED25519 256]--+
|+=. oo. . |
|+=.. + o . |
|.o*.o E + . |
|+..+ * * o |
|..o . * S . |
| . + = o o |
| + * = |
| = * . |
| .oO.. |
+----[SHA256]-----+
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ eval $(ssh-agent -s)
Agent pid 2285
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-add 1234
Enter passphrase for 1234:
Identity added: 1234 (vikus@Nowutbook)
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ cat 1234.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICRVe0rXqSg6WVUx/E8PgtfUYZ2yznmJxWDwGK5fqcCF vikus@Nowutbook
Добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git remote add origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push -u origin main
warning: auto-detection of host provider took too long (>2000ms)
warning: see https://aka.ms/gcm/autodetect for more information.
warning: use of unencrypted HTTP remote URLs is not recommended; see https://aka.ms/gcm/unsaferemotes for more information.
Enumerating objects: 33, done.
Counting objects: 100% (33/33), done.
Delta compression using up to 12 threads
Compressing objects: 100% (30/30), done.
Writing objects: 100% (33/33), 3.78 KiB | 257.00 KiB/s, done.
Total 33 (delta 6), 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/SemionovaVV/cs-lab02.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git remote -v
origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git (fetch)
origin http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git (push)
Получение проекта с сервера
Предположим, к разработке проекта присоединяется Боб. Откроем рабочую копию с машины Боба:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob
$ git clone http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git project
Cloning into 'project'...
remote: Enumerating objects: 33, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 33 (delta 6), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (33/33), done.
Resolving deltas: 100% (6/6), done.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob
$ cd project
Настроим хранилище Боба:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.name 'Bob (SemionovaVV)'
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.email 'SemionovaVV@mpei.ru'
7. Совместная работа над проектом без конфликтов правок
Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub.
«На машине Боба» добавляем в программу печать произведения чисел и делаем коммит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -m 'code: вывод произведения'
[main 8d6c19d] code: вывод произведения
1 file changed, 1 insertion(+)
Отправляем коммит на сервер:
vikus@Nowutbook 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), 407 bytes | 407.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/SemionovaVV/cs-lab02.git
2c65a3f..8d6c19d main -> main
«На машине Алисы» (то есть в первом терминале, в каталоге alice/project) выполните загрузку изменений:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 387 bytes | 55.00 KiB/s, done.
From http://uit.mpei.ru/git/SemionovaVV/cs-lab02
2c65a3f..8d6c19d main -> origin/main
Убедимся, что в рабочей копии изменений еще не произошло.
Для этого посмотрим историю всех веток:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 8d6c19d (origin/main, origin/HEAD) code: вывод произведения
* 2c65a3f (HEAD -> main) git: игнорирование файлов
* e5f80c6 git: игнорирование файлов
* 5e36d44 code: вывод разности
* 42776b6 code: вывод суммы
* f3bbc96 code: вывод суммы
* 804a394 code: вывод суммы
* 2915fd0 code: вывод суммы
* dcb4ced code: вывод суммы
* 7f26453 code: вывод суммы
* ba860ff build: добавлен файл проекта
* 42dd034 code: заготовка программы
Как можно видеть, ветка main отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull --ff-only
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git merge
Updating 2c65a3f..8d6c19d
Fast-forward
main.cpp | 1 +
1 file changed, 1 insertion(+)
«От имени Алисы» добавляем в программу печать деления, а после коммит:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод деления'
[main ba49d4a] code: вывод деления
1 file changed, 1 insertion(+)
Загружаем изменения на сервер:
vikus@Nowutbook 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), 417 bytes | 417.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git
8d6c19d..ba49d4a main -> main
И получаем новую версию «на машине Боба:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 397 bytes | 15.00 KiB/s, done.
From http://uit.mpei.ru/git/SemionovaVV/cs-lab02
8d6c19d..ba49d4a main -> origin/main
Ветка main, как мы знаем, отстает на один коммит от ветки origin/main. Продвинем ветку main к скачанной версии:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull --ff-only
Updating 8d6c19d..ba49d4a
Fast-forward
main.cpp | 1 +
1 file changed, 1 insertion(+)
8. Разрешение конфликтов правок при совместной работе
Далее, Алиса решает добавить в программу печать максимума из чисел, а Боб — минимума.
От лица Алисы, добавляем печать максимума:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод максимума'
[main 332378f] code: вывод максимума
1 file changed, 1 insertion(+)
Загружаем изменения на сервер от лица Алисы:
vikus@Nowutbook 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), 410 bytes | 410.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/SemionovaVV/cs-lab02.git
ba49d4a..332378f main -> main
От лица Боб, добавляем печать минимума:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -m 'code: вывод минимума'
[main 5d39356] code: вывод минимума
1 file changed, 1 insertion(+)
Загружаем изменения на сервер от лица Боба:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
To http://uit.mpei.ru/git/SemionovaVV/cs-lab02.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'http://uit.mpei.ru/git/SemionovaVV/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.
Однако загрузить на сервер изменения получается только у Алисы потому, что Боб затем пытается загрузить версию, основанную на более старом коммите, чем самый новый коммит в репозитарии GitHub.
Загрузим версию с сервера:
vikus@Nowutbook 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), 390 bytes | 16.00 KiB/s, done.
From http://uit.mpei.ru/git/SemionovaVV/cs-lab02
ba49d4a..332378f main -> origin/main
Можно видеть, что ветка main локального репозитария разошлась с веткой origin/main, то есть с веткой main на сервере.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 5d39356 (HEAD -> main) code: вывод минимума
| * 332378f (origin/main, origin/HEAD) code: вывод максимума
|/
* ba49d4a code: вывод деления
* 8d6c19d code: вывод произведения
* 2c65a3f git: игнорирование файлов
* e5f80c6 git: игнорирование файлов
* 5e36d44 code: вывод разности
* 42776b6 code: вывод суммы
* f3bbc96 code: вывод суммы
* 804a394 code: вывод суммы
* 2915fd0 code: вывод суммы
* dcb4ced code: вывод суммы
* 7f26453 code: вывод суммы
* ba860ff build: добавлен файл проекта
* 42dd034 code: заготовка программы
Бобу нужно переместить свой коммит поверх коммита Алисы, то есть поверх origin/main:
vikus@Nowutbook 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 5d39356... code: вывод минимума
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", 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 5d39356... # code: вывод минимума
Команда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git rebase --continue
code: вывод минимума
# Conflicts:
# main.cpp
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# interactive rebase in progress; onto 332378f
# Last command done (1 command done):
# pick 5d39356 # code: вывод минимума
# No commands remaining.
# You are currently rebasing branch 'main' on '332378f'.
#
# Changes to be committed:
# modified: main.cpp
#
# Untracked files:
# main.exe
# main.o
#
.git/COMMIT_EDITMSG [unix] (23:28 15/10/2025) 21,1 All
"~/Desktop/lab02/bob/project/.git/COMMIT_EDITMSG" [unix] 21L, 513B
[detached HEAD bca6886] code: вывод минимума
1 file changed, 3 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/main.
Отправим изменения на сервер:
vikus@Nowutbook 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), 411 bytes | 205.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/SemionovaVV/cs-lab02.git
332378f..bca6886 main -> main
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull --ff-only
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), 391 bytes | 17.00 KiB/s, done.
From http://uit.mpei.ru/git/SemionovaVV/cs-lab02
332378f..bca6886 main -> origin/main
Updating 332378f..bca6886
Fast-forward
main.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
vikus@Nowutbook 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), 410 bytes | 410.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
commit bca688623558340b5ecac204396b8866395357f5 (HEAD -> main, origin/main, orig
Author: Bob (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 22:29:52 2025 +0300
code: вывод минимума
commit 332378f3a9df4339e24ed807181a74a1b2fbb12d
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 22:25:41 2025 +0300
code: вывод максимума
commit ba49d4ae3de51853bb9c75f4ddd3a060d533b2e2
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 21:19:28 2025 +0300
code: вывод деления
commit 8d6c19d6ad9a5f4ac0e27aa1dc25e9c955873259
Author: Bob (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 21:02:51 2025 +0300
:...skipping...
commit bca688623558340b5ecac204396b8866395357f5 (HEAD -> main, origin/main, orig
Author: Bob (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 22:29:52 2025 +0300
code: вывод минимума
commit 332378f3a9df4339e24ed807181a74a1b2fbb12d
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 22:25:41 2025 +0300
code: вывод максимума
commit ba49d4ae3de51853bb9c75f4ddd3a060d533b2e2
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 21:19:28 2025 +0300
code: вывод деления
commit 8d6c19d6ad9a5f4ac0e27aa1dc25e9c955873259
Author: Bob (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Wed Oct 15 21:02:51 2025 +0300
code: вывод произведения
commit 2c65a3fc17bf631759d4aeff8e70202b907244bb
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:27:47 2025 +0300
git: игнорирование файлов
commit e5f80c66587e57cf18989cfd1c2e330b1c50f207
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:22:30 2025 +0300
git: игнорирование файлов
commit 5e36d4405b2f14b303d63c090380d88852feaac8
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:12:30 2025 +0300
code: вывод разности
commit 42776b65fe219c7f2abbe80c8bb3d33c71285fdd
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:10:46 2025 +0300
code: вывод суммы
commit f3bbc9658b0ae08b25bad6ac3883c4822eb51774
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:09:45 2025 +0300
code: вывод суммы
commit 804a3948d9da0cc8e034b46f476e245c79c9bdf3
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:06:28 2025 +0300
code: вывод суммы
commit 2915fd09e333e2ae48c46af8f9737be77ec11dce
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 23:00:31 2025 +0300
code: вывод суммы
commit dcb4ced5a1eac64ae7366e1c823911c5b9177fe2
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:58:06 2025 +0300
code: вывод суммы
commit 7f264539ca8e0cbfce657726fb98f8fda7eb2d6a
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:55:20 2025 +0300
code: вывод суммы
commit ba860ff1ea4c21e66f5c39eed5a87d5bc569a880
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:47:33 2025 +0300
build: добавлен файл проекта
commit 42dd0348fb14062e85bd9a758a2f883306bb2fb7
Author: Alice (SemionovaVV) <SemionovaVV@mpei.ru>
Date: Mon Oct 13 22:36:13 2025 +0300
code: заготовка программы
Получили желаемый результат.
9. Использование веток
Пока Боб синхронизирует изменения, Алиса меняет целые числа на действительные, для этого создадим отдельную ветку double т.к. это может занять время.
Переключаюсь с ветки main на ветку double:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git branch double
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout double
Switched to branch 'double'
Меняем тип данных и коммитим изменения в файле:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double)
$ git add main.cpp
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double)
$ git commit -m 'code: изменение типа данных'
[double a9a9a96] code: изменение типа данных
1 file changed, 1 insertion(+), 1 deletion(-)
Обратно переключаемся на ветку main:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (double)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git fetch
Получаем одновременно две ветки:
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 9b1dc3f (double) code: изменение типа данных
* bca6886 (HEAD -> main, origin/main, origin/HEAD) code: вывод минимума
* 332378f code: вывод максимума
* ba49d4a code: вывод деления
* 8d6c19d code: вывод произведения
* 2c65a3f git: игнорирование файлов
* e5f80c6 git: игнорирование файлов
* 5e36d44 code: вывод разности
* 42776b6 code: вывод суммы
* f3bbc96 code: вывод суммы
* 804a394 code: вывод суммы
* 2915fd0 code: вывод суммы
* dcb4ced code: вывод суммы
* 7f26453 code: вывод суммы
* ba860ff build: добавлен файл проекта
* 42dd034 code: заготовка программы
Объединяем ветки double и main. Вносим последние изменения и загружаем на GitHub.
vikus@Nowutbook MINGW64 ~/Desktop/lab02/alice/project (main)
$ git merge double
Updating bca6886..9b1dc3f
Fast-forward
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
vikus@Nowutbook 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), 402 bytes | 201.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/SemionovaVV/cs-lab02.git
bca6886..9b1dc3f main -> main
Загрузка…
Отмена
Сохранить