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