@ -101,10 +101,25 @@ git init
 
			
		
	
		
		
			
				
					
					```
```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					К приглашению командной строки добавилось `(master)` : имя текущий ветви Git.
К приглашению командной строки добавилось `(master)` : имя текущий ветви Git.
 
			
		
	
		
		
			
				
					
					Ветвь `master`  используется по умолчанию.
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					Git с настройками по умолчанию печатает длинное сообщение-подсказку,
 
			
		
	
		
		
			
				
					
					строки которого начинаются с `hint:` .
 
			
		
	
		
		
			
				
					
					Суть сообщения в том, что долгое время ветка по умолчанию называлась `master` ,
 
			
		
	
		
		
			
				
					
					но по известным причинам разработчики Git планируют изменить это,
 
			
		
	
		
		
			
				
					
					поэтому сразу предлагается поменять имя ветки и дается команда для этого.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					**Самостоятельно.**
 
			
		
	
		
		
			
				
					
					Поменяйте имя ветки на `main`  при помощи предложенной команды.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					**Примечание.**
 
			
		
	
		
		
			
				
					
					Многие проекты продолжают успешно использовать `master` ,
 
			
		
	
		
		
			
				
					
					чтобы не менять сложившиеся процессы.
 
			
		
	
		
		
			
				
					
					Мы предлагаем использовать `main` , во-первых, чтобы попробовать лишнюю команду,
 
			
		
	
		
		
			
				
					
					во-вторых, потому что такой станет ветка по умолчанию в будущем.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Git хранит свои данные в каталоге `.git`  в той папке, где сделано `git init` .
Git хранит свои данные в каталоге `.git`  в той папке, где сделано `git init` .
 
			
		
	
		
		
			
				
					
					Ее можно увидеть командой `ls -A` .
Ее можно увидеть командой `ls -A` .
 
			
		
	
		
		
			
				
					
					Каталог является скрытым, поэтому в «Проводнике» его по умолчанию не видно.
 
			
		
	
		
		
			
				
					
					Заходить в `.git` и что-либо делать там не нужно.
Заходить в `.git` и что-либо делать там не нужно.
 
			
		
	
		
		
			
				
					
					Если удалить этот каталог, репозитарий будет безвозвратно утерян.
Если удалить этот каталог, репозитарий будет безвозвратно утерян.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -179,7 +194,9 @@ git status
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					**В отчете** нужно пояснить, что означает каждая строка вывода этой команды.
**В отчете** нужно пояснить, что означает каждая строка вывода этой команды.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Добавим файл `main.cpp`  в отслеживаемые (в индекс):
Добавим файл `main.cpp`  в индекс, то есть в набор изменений, который войдет
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					в очередной коммит. Так как этот файл ранее не отслеживался Git,
 
			
		
	
		
		
			
				
					
					то говорят, что файл «заносят под Git» или «начинают отслеживать».
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					``` sh
``` sh
 
			
		
	
		
		
			
				
					
					git add main.cpp
git add main.cpp
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -344,7 +361,12 @@ git commit -a -m "..."
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					### Работа с журналом репозитария
### Работа с журналом репозитария
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Журнал репозитария показывает команда `git log` .  У нее много опций, например:
Журнал репозитария показывает команда `git log` .
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Если лог изменений длинный, `git log`  показывает текст с прокруткой.
 
			
		
	
		
		
			
				
					
					Чтобы выйти из этого режима, нажмите `q` .
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					У команды `git log`  много опций, например:
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					* `git log --stat`  показывает файлы, измененные в коммитах.
* `git log --stat`  показывает файлы, измененные в коммитах.
 
			
		
	
		
		
			
				
					
					* `git log --oneline --decorate`  показывает коммиты компактно (`--oneline`),
* `git log --oneline --decorate`  показывает коммиты компактно (`--oneline`),
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -357,9 +379,6 @@ git commit -a -m "..."
 
			
		
	
		
		
			
				
					
					команды показывают хэш сокращенно — краткий вариант тоже будет восприниматься
команды показывают хэш сокращенно — краткий вариант тоже будет восприниматься
 
			
		
	
		
		
			
				
					
					командами Git, которые принимают хэш.
командами Git, которые принимают хэш.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Если лог изменений длинный, `git log`  показывает текст с прокруткой.
 
			
		
	
		
		
			
				
					
					Чтобы выйти из этого режима, нажмите `q` .
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Попробуйте каждую из приведенных команд.  ** В отчете** подробно опишите,
Попробуйте каждую из приведенных команд.  ** В отчете** подробно опишите,
 
			
		
	
		
		
			
				
					
					что показывается `git log --stat`  для последнего коммита.
что показывается `git log --stat`  для последнего коммита.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -382,7 +401,7 @@ git commit -a -m "..."
 
			
		
	
		
		
			
				
					
					Просмотрим последний коммит тремя эквивалентными способами:
Просмотрим последний коммит тремя эквивалентными способами:
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					1. `git show HEAD`  (текущий)
1. `git show HEAD`  (текущий)
 
			
		
	
		
		
			
				
					
					2. `git show ma ster ` (по имени ветви)
2. `git show ma in ` (по имени ветви)
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					3. `git show d2e8af`  (по хэшу нужного коммита)
3. `git show d2e8af`  (по хэшу нужного коммита)
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Для просмотра предыдущего коммита можно либо записать его хэш,
Для просмотра предыдущего коммита можно либо записать его хэш,
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -484,7 +503,7 @@ git checkout HEAD -- main.cpp
 
			
		
	
		
		
			
				
					
					### Регистрация на сервере
### Регистрация на сервере
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Зарегистрируйтесь на [Git УИТ](http://uit.mpei.ru/git)
Зарегистрируйтесь на [Git УИТ](http://uit.mpei.ru/git)
 
			
		
	
		
		
			
				
					
					под именем вида `Kozl y ukDA` (своя фамилия и инициалы, как почта МЭИ).
под именем вида `Kozl i ukDA` (своя фамилия и инициалы, как почта МЭИ).
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					Пароль придумайте самостоятельно.
Пароль придумайте самостоятельно.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -563,8 +582,8 @@ cat ~/.ssh/id_rsa.pub
 
			
		
	
		
		
			
				
					
					**Самостоятельно.**
**Самостоятельно.**
 
			
		
	
		
		
			
				
					
					Скопировать открытый ключ (текст) и добавить в список открытых ключей
Скопировать открытый ключ (текст) и добавить в список открытых ключей
 
			
		
	
		
		
			
				
					
					своей учетной записи. Это делается в настройках (меню пользователя
своей учетной записи. Это делается в настройках (меню пользователя
 
			
		
	
		
		
			
				
					
					в правом верхнем углу, пункт *Settings* ), раздел *SSH and  GPG keys,*
в правом верхнем углу, пункт *Settings* ), раздел *SSH/ GPG keys,*
 
			
				
				
			
		
	
		
		
			
				
					
					кнопка *New SSH  key.*панель *Manage SSH keys,*  кнопка *Add  key.* 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Если работа выполняется в компьютерном классе, закрытый ключ будет утерян
Если работа выполняется в компьютерном классе, закрытый ключ будет утерян
 
			
		
	
		
		
			
				
					
					после выхода из учетной записи (или выключении компьютера). Проще всего
после выхода из учетной записи (или выключении компьютера). Проще всего
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -578,9 +597,12 @@ cat ~/.ssh/id_rsa.pub
 
			
		
	
		
		
			
				
					
					### Отправка проекта на сервер
### Отправка проекта на сервер
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Создайте репозитарий под названием `cs-lab02` .
Создайте репозитарий под названием `cs-lab02` .
 
			
		
	
		
		
			
				
					
					Для этого нужно нажать на `+`  слева вверху и выбрать `New Repository` .
Для этого нужно нажать на знак «плюс» справа вверху и выбрать *New Repository.*
 
			
				
				
			
		
	
		
		
			
				
					
					Не нужно добавлять в репозитарий файл `README.md`  или лицензию,
 
			
				
				
			
		
	
		
		
			
				
					
					если предлагаются такие галочки.
* В поле *Repository Name*  нужно ввести `cs-lab02` .
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					* Галочку *Make repository private*  нужно снять,
 
			
		
	
		
		
			
				
					
					    чтобы репозитарий был виден всем пользователям.
 
			
		
	
		
		
			
				
					
					* Остальные настройки нужно оставить по умолчанию.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					После создания пустого репозитария будет показана страница с инструкциями,
После создания пустого репозитария будет показана страница с инструкциями,
 
			
		
	
		
		
			
				
					
					как настроить связь с удаленным хранилищем:
как настроить связь с удаленным хранилищем:
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -659,11 +681,11 @@ git fetch
 
			
		
	
		
		
			
				
					
					git log --oneline --decorate --all --graph
git log --oneline --decorate --all --graph
 
			
		
	
		
		
			
				
					
					```
```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Как можно видеть, ветка `ma ster ` отстает на один коммит от ветки
Как можно видеть, ветка `ma in ` отстает на один коммит от ветки
 
			
				
				
			
		
	
		
		
			
				
					
					`origin/ma ster` (версии ветки `master  ` из удаленного репозитария под названием`origin/ma in` (версии ветки `main  ` из удаленного репозитария под названием 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					`origin` , то есть на сервере).`origin` , то есть на сервере). 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Продвиньте ветку `ma ster ` к скачанной версии:
Продвиньте ветку `ma in ` к скачанной версии:
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					``` sh
``` sh
 
			
		
	
		
		
			
				
					
					git pull --ff-only
git pull --ff-only
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -709,11 +731,13 @@ cout << "A + B = " << a + b << '\n'
 
			
		
	
		
		
			
				
					
					«От лица Боба» загрузите коммиты из удаленного хранилища и отобразите
«От лица Боба» загрузите коммиты из удаленного хранилища и отобразите
 
			
		
	
		
		
			
				
					
					историю всех веток — результат нужно представить ** в отчете.**
историю всех веток — результат нужно представить ** в отчете.**
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Можно видеть, что ветка `master`  раздвоилась.  Бобу нужно переместить свой
Можно видеть, что ветка `main`  локального репозитария
 
			
				
				
			
		
	
		
		
			
				
					
					коммит поверх коммита Алисы, то есть поверх `origin/master` :
разошлась с веткой `origin/main` , то есть с веткой `main`  на сервере.
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					Бобу нужно переместить свой коммит поверх коммита Алисы,
 
			
		
	
		
		
			
				
					
					то есть поверх `origin/main` :
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					``` sh
``` sh
 
			
		
	
		
		
			
				
					
					git rebase origin/master 
git rebase origin/main 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					```
```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Однако эта команда завершается с ошибкой, сообщающей о конфликте в `main.cpp`.
Однако эта команда завершается с ошибкой, сообщающей о конфликте в `main.cpp`.
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -766,17 +790,17 @@ git checkout double
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Замените тип переменных `a`  и `b`  на `double` и сделайте коммит.
Замените тип переменных `a`  и `b`  на `double` и сделайте коммит.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Переключитесь на ветку `ma ster `:
Переключитесь на ветку `ma in `:
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					``` sh
``` sh
 
			
		
	
		
		
			
				
					
					git checkout master 
git checkout main 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					```
```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					**Самостоятельно.**
**Самостоятельно.**
 
			
		
	
		
		
			
				
					
					Синхронизируйте ветку `ma ster ` «на машине Алисы» с сервером.
Синхронизируйте ветку `ma in ` «на машине Алисы» с сервером.
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					Просмотрите историю всех веток и занесите результат ** в отчет.**
Просмотрите историю всех веток и занесите результат ** в отчет.**
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Слейте ветку `double`  в `master `:
Слейте ветку `double`  в `main `:
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					``` sh
``` sh
 
			
		
	
		
		
			
				
					
					git merge double
git merge double