# Вход в терминал и создание структуры каталогов 1. ``` 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`**: Текущий рабочий каталог. 2. ``` 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`. 3. # Инициализация репозитария и настройка 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". 2. Настройка конфигурации пользователя ```bash 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. Проверка состояния репозитория ```bash 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), так как это первый коммит в репозитории. 2. Переименование ветки ``` bash 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. Проверка статуса изменений ``` bash 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 строки. 3. Один из видов коммита ``` bash 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` обновляет индекс, добавляя изменения в уже отслеживаемых файлах. Она не добавляет новые файлы, а только фиксирует изменения, такие как модификация или удаление. 4. Один из видов коммита ```bash 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 ..." 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 ```bash Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git log --stat commit 21c0a2b88e9b0e642ce274af2153b97061e8e977 (HEAD -> main) Author: Alice(KozlovDD) Date: Mon Apr 21 12:07:35 2025 +0300 git: .gitignore .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 443aaffefbeeef811db009094d50167ccecfa122 Author: Alice(KozlovDD) Date: Mon Apr 21 12:03:15 2025 +0300 code: вывод разности(способ коммита №3) main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit daf8dc35a657a397544aceacad8b762566b739b7 Author: Alice(KozlovDD) Date: Mon Apr 21 12:01:07 2025 +0300 code: способ коммита #2 (вывод суммы) main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5a496592182d7d655efc6ae3f86880d208a05eb7 Author: Alice(KozlovDD) 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: способ коммита #2 (вывод суммы)". - `5a49659:` Коммит "code: способ коммита #1 (ввод двух чисел)". - `09eacb1:` Коммит "build: Добавлен файл проекта". - `5693668:` Коммит "code: заготовка программы". 3. git log --oneline --decorate --all --graph ```bash 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: способ коммита #2 (вывод суммы) * 5a49659 code: способ коммита #1 (ввод двух чисел) * 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) Date: Mon Apr 21 11:57:02 2025 +0300 build: Добавлен файл проекта ``` - Команда `log -- project.cbp` выводит историю коммитов, связанных только с файлом `project.cbp`. Это полезно для отслеживания изменений в конкретном файле без просмотра всей истории репозитория. ### Основные моменты из вывода: - Коммит 09eacb1ca6: - Автор: Alice(KozlovDD) - Дата: Mon Apr 21 11:57:02 2025 +0300 - Сообщение: "build: Добавлен файл проекта" 5. git log --grep "build: ```bash Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git log --grep "build:" commit 09eacb1ca614507e6e79ff061247967d01eb3d2f Author: Alice(KozlovDD) 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) 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) - Дата: Mon Apr 21 12:03:15 2025 +0300 - Сообщение: "code: вывод разности(способ коммита №3)" - Изменения в файле main.cpp: - Было добавлено: - "A + B = " << a + b << '\n' - "A - B = " << a - b << '\n'; - Изменения в строках ввода-вывода для отображения суммы и разности двух чисел. 2. Просмотр изменений способом 2 ```bash Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) $ git show main~1 commit 443aaffefbeeef811db009094d50167ccecfa122 Author: Alice(KozlovDD) 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) 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. ```bash 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. ```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: вывод произведения" [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` из последнего коммита, отменяя все незакоммиченные изменения в рабочем каталоге. Это полезно, если вы хотите отбросить изменения в конкретном файле и вернуть его к состоянию последнего коммита. # Обмен через удаленное хранилище 1. ```bash 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` команды. # Отправка на сервер + Совместная работа без конфликтов правок ```bash 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`. Процесс включает подсчет и сжатие объектов, а также их запись на удаленный сервер. 2. ```bash 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: заготовка программы ``` 4. ```bash 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 ``` 6. ```bash 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. ```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 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` на сервере) 3. ```bash 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: способ коммита #2 (вывод суммы) * 5a49659 code: способ коммита #1 (ввод двух чисел) * 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 ", 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, так как возник конфликт. 5. ```bash 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, который содержит объединенные изменения, а также показываются коммиты из удаленной ветки. # Использование веток 1. ```bash 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: заготовка программы ```