|
4 недель назад | |
---|---|---|
.gitignore | 1 месяц назад | |
README.md | 4 недель назад | |
main.cpp | 1 месяц назад | |
project.cbp | 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
-
Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project $ git initInitialized empty Git repository in E:/Разработка ПО. 2ой семестр/lab02/alice/project/.git/
Действие: Инициализация нового локального репозитория Git в текущей директории.
Результат: Создана скрытая служебная папка .git, начата история версий. Ветка по умолчанию получила имя "main".
- Настройка конфигурации пользователя
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. Адрес электронной почты также будет отображаться в информации о коммитах.
Создание коммитов
Занесение файлов под контроль версий
- Проверка состояния репозитория
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), так как это первый коммит в репозитории.
- Переименование ветки
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 строк.
Создание коммитов с изменениями
- Проверка статуса изменений
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 строки.
- Один из видов коммита
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
обновляет индекс, добавляя изменения в уже отслеживаемых файлах. Она не добавляет новые файлы, а только фиксирует изменения, такие как модификация или удаление.
- Один из видов коммита
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 должен игнорировать.
Просмотр истории
Работа с журналом репозитария
- 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: способ коммита #2 (вывод суммы)".5a49659:
Коммит "code: способ коммита #1 (ввод двух чисел)".09eacb1:
Коммит "build: Добавлен файл проекта".5693668:
Коммит "code: заготовка программы".
- 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: .gitignore443aaff
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) <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: Добавлен файл проекта"
- 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';
- Изменения в строках ввода-вывода для отображения суммы и разности двух чисел.
- Было добавлено:
- Просмотр изменений способом 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
. Вывод включает в себя детали автора, дату, сообщение коммита, а также изменения, внесенные в код.
Просмотр изменений
-
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 (последний коммит). Она показывает, какие изменения были внесены в файлы между этими двумя состояниями репозитория.
Откат изменений
-
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
. Процесс включает подсчет и сжатие объектов, а также их запись на удаленный сервер.
-
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: заготовка программы
-
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(-)
Разрешение конфликтов правок при совместной работе
-
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
на сервере)
-
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: .gitignore443aaff
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 <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: заготовка программы