Козлов Данил 398d874e9f Загрузил(а) файлы в '' 4 недель назад
.gitignore git: .gitignore 1 месяц назад
README.md Загрузил(а) файлы в '' 4 недель назад
main.cpp Merge branch 'double' 1 месяц назад
project.cbp build: Добавлен файл проекта 1 месяц назад

README.md

Вход в терминал и создание структуры каталогов

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02
$ mkdir alice
  • mkdir alice: Создает директорию alice.

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02 $ mkdir bob

  • mkdir bob: Создает директорию bob.

Объяснение вывода:

  • Admin@DESKTOP-M49TLCR: Имя пользователя и компьютера.
  • MINGW64: Используемая среда MinGW для 64-бит Windows.
  • /e/Разработка ПО. 2ой семестр/lab02: Текущий рабочий каталог.
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02
$ cd alice
  • cd alice: Переходит в директорию alice.

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice $ mkdir project

  • mkdir project: Создает директорию project внутри alice.

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice $ cd project/

  • cd project/: Переходит в директорию project.

Инициализация репозитария и настройка GIT

  1.  Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project
    
     $ git initInitialized empty Git repository in E:/Разработка ПО. 2ой семестр/lab02/alice/project/.git/
    

Действие: Инициализация нового локального репозитория Git в текущей директории.
Результат: Создана скрытая служебная папка .git, начата история версий. Ветка по умолчанию получила имя "main".

  1. Настройка конфигурации пользователя
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master)
$ git config user.name 'Alice(KozlovDD)'

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master)
	$ git config user.email 'KozlovDanD@mpei.ru'

git config user.name 'Alice(KozlovDD)'

  • Объяснение: Эта команда устанавливает имя пользователя для текущего репозитория Git. Имя пользователя будет отображаться в информации о коммитах, которые вы создаете.

`git config user.email 'KozlovDanD@mpei.ru'

  • Объяснение: Эта команда устанавливает адрес электронной почты пользователя для текущего репозитория Git. Адрес электронной почты также будет отображаться в информации о коммитах.

Создание коммитов

Занесение файлов под контроль версий

  1. Проверка состояния репозитория
     Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master)
    

$ git status On branch master

No commits yet

Untracked files: (use "git add ..." to include in what will be committed) main.cpp project.cbp

nothing added to commit but untracked files present (use "git add" to track)

- Объяснение: Эта команда отображает текущее состояние рабочего каталога и области индексирования. Она показывает, что вы находитесь на ветке `master`, и сообщает, что в репозитории еще нет коммитов. Также указывает на наличие неотслеживаемых файлов, таких как `main.cpp` и `project.cbp`, которые можно добавить в индекс для последующего коммит
## Составление сообщений к коммитам
1. Добавление и фиксация изменений
``` bash
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master)
$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master)
$ git commit -m 'code: заготовка программы'
[master (root-commit) 5693668] code: заготовка программы
 1 file changed, 9 insertions(+)
 create mode 100644 main.cpp


  • Команда git add main.cpp добавляет файл main.cpp в индекс (стейджинг) для подготовки к коммиту. Теперь main.cpp будет отслеживаться Git и включен в следующий коммит.
  • Команда git commit -m 'code: заготовка программы' создает новый коммит с сообщением "code: заготовка программы". В коммит включены изменения, подготовленные с помощью git add. В данном случае, это добавление файла main.cpp с девятью новыми строками кода. Команда также создает корневой коммит (root-commit), так как это первый коммит в репозитории.
  1. Переименование ветки
    
    

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) $ git branch -m main

- Команда `branch` переименовывает текущую ветку с `master` на `main`.


3.  Добавление и коммит файла проекта
   ``` bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git commit -m 'build: Добавлен файл проекта'
[main 09eacb1] build: Добавлен файл проекта
 1 file changed, 40 insertions(+)
 create mode 100644 project.cbp


  • Команда создает новый коммит с сообщением "build: Добавлен файл проекта", включая изменения, связанные с добавлением файла project.cbp, в котором было добавлено 40 строк.

Создание коммитов с изменениями

  1. Проверка статуса изменений
     Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git status On branch main Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp

no changes added to commit (use "git add" and/or "git commit -a")

- Команда показывает текущее состояние рабочего каталога и индексной области. Вы находитесь на ветке `main`, и Git указывает, что файл `main.cpp` был изменен, но изменения не подготовлены для коммита. Команда также предлагает использовать `git add` для подготовки изменений к коммиту

2. Один из видос коммита
   ``` bash
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git add main.cpp
git
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git commit -m "code: способ коммита #1 (ввод двух чисел)"
[main 5a49659] code: способ коммита #1 (ввод двух чисел)
 1 file changed, 4 insertions(+), 2 deletions(-)


  • Команда создает новый коммит с сообщением "code: способ коммита #1 (ввод двух чисел)". В коммит включены изменения в main.cpp, где было добавлено 4 строки и удалено 2 строки.
  1. Один из видов коммита
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git add -u

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git commit -m "code: способ коммита #2 (вывод суммы)"
[main daf8dc3] code: способ коммита #2 (вывод суммы)
1 file changed, 1 insertion(+), 1 deletion(-)
  • Команда add -u обновляет индекс, добавляя изменения в уже отслеживаемых файлах. Она не добавляет новые файлы, а только фиксирует изменения, такие как модификация или удаление.
  1. Один из видов коммита

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git commit -a -m "code: вывод разности(способ коммита №3)" [main 443aaff] code: вывод разности(способ коммита №3) 1 file changed, 3 insertions(+), 1 deletion(-)

Команда `git commit -a -m` создает коммит с сообщением `"code: вывод разности(способ коммита №3)"`. Опция `-a` автоматически индексирует все измененные и удаленные файлы, которые уже отслеживаются, перед созданием коммита. В результате, коммит включает изменения в одном файле, где было добавлено 3 строки и удалено 1 строка.
# Игнорирование файлов
   ```bash
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        project.depend

nothing added to commit but untracked files present (use "git add" to track)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git add .gitignore

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git commit -m "git: .gitignore"
[main 21c0a2b] git: .gitignore
 1 file changed, 3 insertions(+)
 create mode 100644 .gitignore


  • Команда status отображает состояние рабочего каталога и индексной области. Она указывает, что в репозитории есть неотслеживаемые файлы: .gitignore и project.depend.
  • Команда добавляет файл .gitignore в индекс, чтобы начать отслеживать его изменения. Этот файл используется для указания файлов или каталогов, которые Git должен игнорировать.

Просмотр истории

Работа с журналом репозитария

  1. git log --stat
     Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git log --stat commit 21c0a2b88e (HEAD -> main) Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 12:07:35 2025 +0300

git: .gitignore

.gitignore | 3 +++ 1 file changed, 3 insertions(+)

commit 443aaffefb Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 12:03:15 2025 +0300

code: вывод разности(способ коммита №3)

main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)

commit daf8dc35a6 Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 12:01:07 2025 +0300

code: способ коммита #2 (вывод суммы)

main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

commit 5a49659218 Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 11:59:55 2025 +0300

- Команда `git log --statgit log --stat` отображает историю коммитов с детальной статистикой изменений. Она показывает каждый коммит с указанием автора, даты, сообщения и статистики изменений, таких как количество измененных файлов, добавленных и удаленных строк. 

### Основные моменты из вывода:
- Последний коммит: `"git: .gitignore"` — добавлен файл .gitignore с 3 новыми строками.
- Предыдущий коммит: `"code: вывод разности(способ коммита №3)"` — изменения в main.cpp с 3 добавлениями и 1 удалением.
- Ранее: `"code: способ коммита #2 (вывод суммы)"` — изменения в `main.cpp` с 1 добавлением и 1 удалением.



2. git log --oneline --decorate
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git log --oneline --decorate
21c0a2b (HEAD -> main) git: .gitignore
443aaff code: вывод разности(способ коммита №3)
daf8dc3 code: способ коммита #2 (вывод суммы)
5a49659 code: способ коммита #1 (ввод двух чисел)
09eacb1 build: Добавлен файл проекта
5693668 code: заготовка программы

  • Команда git log --oneline --decorate предоставляет краткий обзор истории коммитов в упрощенном виде. Каждый коммит отображается в одной строке с его хешем, сообщением и дополнительной информацией о ветках и указателях.

Основные моменты из вывода:

  • 21c0a2b (HEAD -> main): Последний коммит с сообщением "git: .gitignore".
  • 443aaff: Коммит "code: вывод разности(способ коммита №3)".
  • daf8dc3: Коммит "code: способ коммита (вывод суммы)".
  • 5a49659: Коммит "code: способ коммита (ввод двух чисел)".
  • 09eacb1: Коммит "build: Добавлен файл проекта".
  • 5693668: Коммит "code: заготовка программы".
  1. git log --oneline --decorate --all --graph

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git log --oneline --decorate --all --graph

  • 21c0a2b (HEAD -> main) git: .gitignore
  • 443aaff code: вывод разности(способ коммита №3)
  • daf8dc3 code: способ коммита (вывод суммы)
  • 5a49659 code: способ коммита (ввод двух чисел)
  • 09eacb1 build: Добавлен файл проекта
  • 5693668 code: заготовка программы

- Команда `git log --oneline --decorate --all --graph` выводит историю коммитов в виде графа, что позволяет визуально отслеживать структуру веток и их историю. Каждый коммит отображается в одной строке, включая хеш, сообщение и декорации, такие как указатели веток.

### Основные моменты из вывода:
- Графическое представление: Звездочки (*) перед каждым коммитом показывают их взаимосвязи и последовательность.
- Коммиты: 
  - `21c0a2b (HEAD -> main):` Последний коммит "git: .gitignore".
  - `443aaff`: "code: вывод разности(способ коммита №3)".
  - `daf8dc3: `"code: способ коммита #2 (вывод суммы)".
  - `5a49659: `"code: способ коммита #1 (ввод двух чисел)".
  - `09eacb1:` "build: Добавлен файл проекта".
  - `5693668:` "code: заготовка программы".



4. git log -- project.cbp
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git log -- project.cbp
commit 09eacb1ca614507e6e79ff061247967d01eb3d2f
Author: Alice(KozlovDD) <KozlovDanD@mpei.ru>
Date:   Mon Apr 21 11:57:02 2025 +0300

    build: Добавлен файл проекта


  • Команда log -- project.cbp выводит историю коммитов, связанных только с файлом project.cbp. Это полезно для отслеживания изменений в конкретном файле без просмотра всей истории репозитория.

Основные моменты из вывода:

  • Коммит 09eacb1ca6:
    • Автор: Alice(KozlovDD) KozlovDanD@mpei.ru
    • Дата: Mon Apr 21 11:57:02 2025 +0300
    • Сообщение: "build: Добавлен файл проекта"
  1. git log --grep "build:
    Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git log --grep "build:" commit 09eacb1ca6 Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 11:57:02 2025 +0300

build: Добавлен файл проекта

- Команда ищет и выводит коммиты, сообщение которых содержит ключевое слово "build:". Это полезно для быстрого нахождения коммитов, связанных с определенной темой или изменением в проекте.


## Просмотр коммитов
1. Просмотр изменений способом 1
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git show HEAD~1
commit 443aaffefbeeef811db009094d50167ccecfa122
Author: Alice(KozlovDD) <KozlovDanD@mpei.ru>
Date:   Mon Apr 21 12:03:15 2025 +0300

    code: вывод разности(способ коммита №3)

diff --git a/main.cpp b/main.cpp
index 2fbd623..3ec5517 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,7 @@ 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';
+
 }

  • Команда отображает подробную информацию о коммите, который находится на один шаг назад от текущего (HEAD~1). Она показывает детали коммита и изменения, которые были внесены в файлы.

Основные моменты из вывода:

  • Коммит 443aaffefb:

    • Автор: Alice(KozlovDD) KozlovDanD@mpei.ru
    • Дата: Mon Apr 21 12:03:15 2025 +0300
    • Сообщение: "code: вывод разности(способ коммита №3)"
  • Изменения в файле main.cpp:

    • Было добавлено:
      • "A + B = " << a + b << '\n'
      • "A - B = " << a - b << '\n';
    • Изменения в строках ввода-вывода для отображения суммы и разности двух чисел.
  1. Просмотр изменений способом 2
    Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git show main~1 commit 443aaffefb Author: Alice(KozlovDD) KozlovDanD@mpei.ru Date: Mon Apr 21 12:03:15 2025 +0300

code: вывод разности(способ коммита №3)

diff --git a/main.cpp b/main.cpp index 2fbd623..3ec5517 100644 --- a/main.cpp +++ b/main.cpp @@ -7,5 +7,7 @@ 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';
    

}

- Команда показывает изменения в коммите, который находится на один шаг назад от текущего состояния ветки `main (main~1)`. Она аналогична `git show HEAD~1` и отображает детали коммита и изменения в файлах.



3. Просмотр изменений способом 3
   ```bash
   $ git show 443aaff
commit 443aaffefbeeef811db009094d50167ccecfa122
Author: Alice(KozlovDD) <KozlovDanD@mpei.ru>
Date:   Mon Apr 21 12:03:15 2025 +0300

    code: вывод разности(способ коммита №3)

diff --git a/main.cpp b/main.cpp
index 2fbd623..3ec5517 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,7 @@ 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';
+
 }


  • Команда отображает полную информацию о коммите с указанным хешем 443aaff. Вывод включает в себя детали автора, дату, сообщение коммита, а также изменения, внесенные в код.

Просмотр изменений

  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git diff diff --git a/main.cpp b/main.cpp index 3ec5517..11e84f5 100644 --- a/main.cpp +++ b/main.cpp @@ -8,6 +8,7 @@ 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';
    

}


- Команда показывает различия между текущими изменениями в рабочем каталоге и последним коммитом. Она позволяет увидеть, какие изменения были внесены в код, но еще не зафиксированы в коммите.



2.  
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git diff 5693668 HEAD
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e607464
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+bin
+obj
+*.layout
diff --git a/main.cpp b/main.cpp
index b4392ec..3ec5517 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,10 @@ 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';
+
 }
diff --git a/project.cbp b/project.cbp
new file mode 100644
index 0000000..99bb702
--- /dev/null

  • Команда сравнивает изменения между двумя коммитами: 5693668 (первоначальный коммит) и HEAD (последний коммит). Она показывает, какие изменения были внесены в файлы между этими двумя состояниями репозитория.

Откат изменений

  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git commit -m "code: вывод произведения" [main e895221] code: вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at 21c0a2b git: .gitignore

- Команда `git reset --hard` откатывает репозиторий к предыдущему коммиту, удаляя все изменения, сделанные в последнем коммите. Теперь HEAD указывает на коммит с сообщением "git: .gitignore", и изменения, связанные с выводом произведения, были потеряны.



2. 
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git checkout HEAD -- main.cpp

  • Команда git checkout восстанавливает файл main.cpp из последнего коммита, отменяя все незакоммиченные изменения в рабочем каталоге. Это полезно, если вы хотите отбросить изменения в конкретном файле и вернуть его к состоянию последнего коммита.

Обмен через удаленное хранилище

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git remote add origin git@uit.mpei.ru:KozlovDanD/cs-lab02.git

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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.36 KiB | 241.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 uit.mpei.ru:KozlovDanD/cs-lab02.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
  • команда git remote add origin добавляет удаленный репозиторий с именем origin по указанному адресу. Это позволяет взаимодействовать с удаленным репозиторием для обмена данными.
  • команда git push -u origin main отправляет локальные изменения на удаленный репозиторий origin, в ветку main. Опция -u устанавливает отслеживание для локальной ветки main и удаленной ветки origin/main. Это облегчает последующие push и pull команды.

Отправка на сервер + Совместная работа без конфликтов правок

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob
$ cd project/

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$  git config user.name 'Bob(KozlovDD)'

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$  git config user.email 'KozlovDanD@mpei.ru'



Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git commit -m "code: Bob вывод произведения"
[main 2b3f606] code: Bob вывод произведения
1 file changed, 2 insertions(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 417 bytes | 208.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 uit.mpei.ru:KozlovDanD/cs-lab02.git
21c0a2b..2b3f606  main -> main

  • Команда отправляет все закоммиченные изменения из локальной ветки main на удаленный репозиторий origin, в ветку main. Процесс включает подсчет и сжатие объектов, а также их запись на удаленный сервер.
  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 397 bytes | 49.00 KiB/s, done. From uit.mpei.ru:KozlovDanD/cs-lab02 21c0a2b..2b3f606 main -> origin/main


- команда `git fetch` загружает последние изменения из удаленного репозитория `origin`, но не объединяет их с локальной веткой. Она обновляет локальный репозиторий информацией о новых коммитах, доступных на удаленном сервере.

3. 
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 2b3f606 (origin/main) code: Bob вывод произведения
* 21c0a2b (HEAD -> main) git: .gitignore
* 443aaff code: вывод разности(способ коммита №3)
* daf8dc3 code: способ коммита #2 (вывод суммы)
* 5a49659 code: способ коммита #1 (ввод двух чисел)
* 09eacb1 build: Добавлен файл проекта
* 5693668 code: заготовка программы


  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git pull --ff-only Updating 21c0a2b..2b3f606 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)

- Команда обновляет локальную ветку main до состояния удаленной ветки `origin/main`, используя `"fast-forward"` слияние. Параметр `--ff-only` гарантирует, что операция завершится успехом только в том случае, если изменения могут быть применены посредством простого продвижения указателя ветки без создания нового коммита слияния.


5. 
   ```bash 
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git commit -m "code: alice добавила деление"
[main 8dc069e] code: alice добавила деление
 1 file changed, 2 insertions(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/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), 411 bytes | 411.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 uit.mpei.ru:KozlovDanD/cs-lab02.git
   2b3f606..8dc069e  main -> main


Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 391 bytes | 30.00 KiB/s, done.
From uit.mpei.ru:KozlovDanD/cs-lab02
   2b3f606..8dc069e  main       -> origin/main
g
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git pull --ff-only
Updating 2b3f606..8dc069e
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)


Разрешение конфликтов правок при совместной работе

  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
    

$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git commit -m "code: alice максимум добавила" [main 6d4cf45] code: alice максимум добавила 1 file changed, 1 insertion(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/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), 409 bytes | 204.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 uit.mpei.ru:KozlovDanD/cs-lab02.git 8dc069e..6d4cf45 main -> main


2. 
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git commit -m "code: bob добавил минимум"
[main c3bd657] code: bob добавил минимум
 1 file changed, 1 insertion(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git push
To uit.mpei.ru:KozlovDanD/cs-lab02.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'uit.mpei.ru:KozlovDanD/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.


Проблема: Отказ в отправке изменений на сервер.
Причина:

  • Удаленный репозиторий содержит коммиты, отсутствующие локально у Боба
  • Конфликт истории версий (Алиса уже обновила main на сервере)
  1. Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 389 bytes | 21.00 KiB/s, done. From uit.mpei.ru:KozlovDanD/cs-lab02 8dc069e..6d4cf45 main -> origin/main

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) $ git pull --ff-only hint: Diverging branches can't be fast-forwarded, you need to either: hint: hint: git merge --no-ff hint: hint: or: hint: hint: git rebase hint: hint: Disable this message with "git config advice.diverging false" fatal: Not possible to fast-forward, aborting.

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) $ git log --oneline --decorate --all --graph

  • c3bd657 (HEAD -> main) code: bob добавил минимум | * 6d4cf45 (origin/main, origin/HEAD) code: alice максимум добавила |/
  • 8dc069e code: alice добавила деление
  • 2b3f606 code: Bob вывод произведения
  • 21c0a2b git: .gitignore
  • 443aaff code: вывод разности(способ коммита №3)
  • daf8dc3 code: способ коммита (вывод суммы)
  • 5a49659 code: способ коммита (ввод двух чисел)
  • 09eacb1 build: Добавлен файл проекта
  • 5693668 code: заготовка программы
- Подсказки указывают на то, что локальная ветка и удаленная ветка разошлись, и fast-forward слияние не может быть выполнено. В таких случаях предлагается использовать git merge --no-ff для создания нового коммита слияния или git rebase для переноса локальных коммитов на вершину удаленной ветки.


4. 
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git rebase origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
error: could not apply c3bd657... code: bob добавил минимум
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".
Could not apply c3bd657... code: bob добавил минимум


  • команда пытается перенести текущие изменения из локальной ветки main на вершину удаленной ветки origin/main. Это позволяет интегрировать изменения из удаленной ветки, сохраняя линейную историю коммитов.
  • Система автоматически пытается объединить изменения, но в файле main.cpp возник конфликт, который необходимо разрешить вручную.
  • сообщение об ошибке указывает на то, что не удалось применить коммит с хешем c3bd657, так как возник конфликт.

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main|REBASE 1/1) $ git add main.cpp

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main|REBASE 1/1) $ git rebase --continue hint: Waiting for your editor to close the file...


- команда продолжает процесс ребейза после того, как все конфликты были разрешены. Git применяет оставшиеся коммиты на вершину текущей ветки.

6. 
   ```bash
	Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 4612506 (HEAD -> main) code: bob добавил минимум code: Добавили максимум и минимум
* 6d4cf45 (origin/main, origin/HEAD) code: alice максимум добавила
* 8dc069e code: alice добавила деление
* 2b3f606 code: Bob вывод произведения
* 21c0a2b git: .gitignore
* 443aaff code: вывод разности(способ коммита №3)
* daf8dc3 code: способ коммита #2 (вывод суммы)
* 5a49659 code: способ коммита #1 (ввод двух чисел)
* 09eacb1 build: Добавлен файл проекта
* 5693668 code: заготовка программы
---
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 435 bytes | 435.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 uit.mpei.ru:KozlovDanD/cs-lab02.git
   6d4cf45..4612506  main -> main


  • В выводе отображается новый коммит с хешем 4612506, который содержит объединенные изменения, а также показываются коммиты из удаленной ветки.

Использование веток

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git branch double

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git checkout double Switched to branch 'double'

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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), 367 bytes | 7.00 KiB/s, done. From uit.mpei.ru:KozlovDanD/cs-lab02 88609ec..04f3153 main -> origin/main

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git merge double Updating 88609ec..00a3f48 Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git push Enumerating objects: 10, done. Counting objects: 100% (10/10), done. Delta compression using up to 16 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 767 bytes | 383.00 KiB/s, done. Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:KozlovDanD/cs-lab02.git 4612506..b32db7a main -> main


- команда `git branch double` создает новую ветку с именем double. Ветка может использоваться для разработки новых функций или для внесения изменений без влияния на основную ветку.
-  команда `git checkout double` переключает текущую рабочую ветку на double. Теперь все коммиты будут добавляться в эту ветку.
- команда `merge` объединяет изменения из ветки double в текущую ветку, которая должна быть main. 



2. 
   ```bash
   Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
*   b32db7a (HEAD -> main, origin/main) Merge branch 'double' code: слияник веток
|\
| * 5d053ca (double) code: int -> double
* | 4612506 code: bob добавил минимум code: Добавили максимум и минимум
|/
* 6d4cf45 code: alice максимум добавила
* 8dc069e code: alice добавила деление
* 2b3f606 code: Bob вывод произведения
* 21c0a2b git: .gitignore
* 443aaff code: вывод разности(способ коммита №3)
* daf8dc3 code: способ коммита #2 (вывод суммы)
* 5a49659 code: способ коммита #1 (ввод двух чисел)
* 09eacb1 build: Добавлен файл проекта
* 5693668 code: заготовка программы