Git, в примерах

Содержание
1. Введение
2. Запуск консоли для работы с Git
3. Git, простые примеры
3.1. Настройка Git-репозитория
3.1.1. Пример 1: создание репозитория и установка локальных настроек
3.1.2. Пример 2: то же что и пример1, но короче запись
3.1.3. Пример 3: установка пользовательских настроек
3.2. Простые операции с одним репозиторием
3.2.1. Пример 1: создать репозиторий, зафиксировать изменения
3.2.2. Пример 2: создать репозиторий, сделать 3 фиксации
3.2.3. Пример 3: работа с git checkout (возврат)
3.2.4. Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)
3.2.5. Пример 5: работа с git branch (слияние двух веток)
3.3. Операции с двумя репозиториями
3.3.1. Пример 1: создать реп, отклонироваться, внести изменения в первый, обновиться во втором
3.3.2. Пример 2: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.3. Пример 3: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.4. Пример 4: втолкнуть данные в удалённый пустой репозиторий
3.3.5. Пример 5: втолкнуть данные в удалённый не пустой репозиторий
3.4. Заключение

Введение

В этой части мы рассмотрим работу с репозиторием git на примерах

Команды, которые будут использоваться здесь, кратко описаны в предыдущей части Git, краткий справочник команд.

Запуск консоли для работы с Git

В одной из предыдущих статей я расказал, как установить Git на ваш компьютер. Сейчас я исхожу из того, что у вас всё установлено.

Напомню ещё раз, что должно быть на данный момент:

  1. у вас установлен Git примерно в такую папку c:Program Files (x86)Git
  2. у вас создан текстовый файл c:bingitbash.bat с содержимым @%WINDIR%system32cmd.exe /c «»C:Program Files (x86)Gitbinsh.exe» —login -i»
  3. путь c:bin добавлен в переменную окружения PATH

Если что-то не сделано, прочитайте ещё раз статью по установке Git.

Имея эти настройки, мы можем вызывать MINGW32 консоль для работы с git, находясь в любой папке, просто набрав команду

gitbash

Далее я исхожу из того, что мы работаем в MINGW32 консоли.

Создадим папку c:git для запуска примеров в ней:

cd c:
mkdir git
cd git

После этого мы располагаемся в директории c:git. Отсюда я предполагаю, что все последующие примеры будут запускаться из этой же директории (Хотя это совершенно не обязательно).

В некоторых примерах я пишу комментарии на английском, чтобы была возможность выполнить код скрипта в MINGW32 под Windows командой

sh -- yourScriptFile

где yourScriptFile — имя файла со скриптами примера. К сожалению, русские комментарии не дают выполнять скрипты.

Git, простые примеры

Настройка Git-репозитория

Пример 1: создание репозитория и установка локальных настроек

Цель: создать репозиторий, установить свое имя и емаил для репозитория

mkdir a1
cd a1
git init                                #1. создать репозиторий в текущей папке
git config user.name YourName           #2. установим имя и эл. ящик для этого репозитория
git config user.name YourEmail@email.x

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

Пример 2: то же что и пример1, но короче запись

Цель: создать репозиторий, установить свое имя и е
маил для репозитория
Заметка: то же, что и в предыдущем примере, но более короткая запись.

git init a1                             #1. создать репозиторий в папке a1 (папка будет создана)
cd a1                                   # перейти в новый репозиторий
git config user.name YourName           #2. установим имя и эл. ящик для этого репозитория
git config user.name YourEmail@email.x

Пример 3: установка пользовательских настроек

Цель: установить глобальные настройки имени и эл. ящика для всех будущих репозиториев

git config --global -l                              # прочитать список глобальных настроек
git config --global user.name YourName              # установить имя и эл. ящик
git config --global user.name YourEmail@email.x

Теперь в каждом новом вашем репозитории не придётся заного устанавливать имя и эл. ящик, т.к. эти данные будут браться из глобальным настроек вашего пользователя. (Файл ~/.gitconfig)

Простые операции с одним репозиторием

Пример 1: создать репозиторий, зафиксировать изменения

Цель: сделать первую фиксацию, просмотреть лог фиксаций

git init a2                     #1. создать репозиторий a2
cd a2                           #2. перейти в новый репозиторий
echo 'line-1' > file1           #3. записать строку 'line-1' в текстовый файл file1 (файл создастся)
git add .                       #4. добавить все файлы в index (staging area)
git commit -m 'My 1 commit'     #5. зафиксировать изменения, установив комментарий 'My first commit'
git log                         #6. просмотреть лог фиксаций

Последняя команда #6 выведет текст, похожий на следующий:

commit 533542948c6e7d4a25925d695d4cf81312d1a30f
Author: YourName <youremail@email.x>
Date:   Wed Jan 4 18:54:49 2012 +0600

My 1 commit

</youremail@email.x>

Обратите внимание, что строка 533542948c6e7d4a25925d695d4cf81312d1a30f является уникальным именем коммита, данное имя может использоваться во многих операциях с git.
Также в этом выводе вы можете наблюдать ваше имя, эл. ящик и комментарий, установленный к фиксации.

Пример 2: создать репозиторий, сделать 3 фиксации

Цель: сделать 3 фиксации, просмотреть лог фиксаций

git init a3                     #1. создать репозиторий a3
cd a3                           #2. перейти в новый репозиторий

echo ‘line-1’ > file1 #3. записать строку ‘line-1’ в текстовый файл file1 (файл создастся)
git add . #4. добавить все файлы в index (staging area)
git commit -m ‘My 1 commit’ #5. зафиксировать изменения, установив комментарий ‘My first commit’

echo ‘line-2’ >> file1 #6. добавить запись в file1
git commit -a -m ‘My 2 commit’ #7. фиксируем изменения. Обратите внимание на ключ -a, который
# позволяет нам не выполнять git add . для файлов, которые ранее уже
# участвовали в фиксациях (см. #4)

echo ‘line-3’ >> file1 #8. добавить запись в file1
git commit -a -m ‘My 3 commit’ #9. зафиксировать изменения

git log #10. просмотреть лог фиксаций

Лог фиксаций будет примерно таким:

commit 812f2a05e9104e3e6f921f62839f75333a8f3150
Author: YourName <youremail@email.x>
Date:   Wed Jan 4 19:22:43 2012 +0600

My 3 commit

commit 1edf5fedb8d86deed2764d2b6701c1d10c35e7b2
Author: YourName <youremail@email.x>
Date: Wed Jan 4 19:12:19 2012 +0600

My 2 commit

commit 533542948c6e7d4a25925d695d4cf81312d1a30f
Author: YourName <youremail@email.x>
Date: Wed Jan 4 18:54:49 2012 +0600

My 1 commit

</youremail@email.x></youremail@email.x></youremail@email.x>

Пример 3: работа с git checkout (возврат)

Цель: сделать 2 фиксации и вернуться на 1 фиксацию назад

git init a4                     #1. создать репозиторий a4
cd a4                           #2. перейти в новый репозиторий

echo ‘line-1’ > file1 #3. записать строку ‘line-1’ в текстовый файл file1 (файл создастся)
git add . #4. добавить все файлы в index (staging area)
git commit -m ‘My 1 commit’ #5. зафиксировать изменения, установив комментарий ‘My first commit’

echo ‘line-2’ >> file1 #6. добавить запись в file1
git commit -a -m ‘My 2 commit’ #7. фиксируем изменения

cat file1 #8. вывести содержимое файла file1 в консоль (увидим две срочки текста)

git checkout HEAD~1 #9. возвращаемся на 1 фиксацию назад относительно положения HEAD
git log #10. смотрим лог изменений относительно нашего текущего положения
git checkout master #11. возвращаемся на верхушку ветки master

Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)

Цель: сделать 2 фиксации и вернуться на 1 фиксацию назад

git init a5                     #1. создать репозиторий a5
cd a5                           #2. перейти в новый репозиторий

echo ‘line-1’ > file1 #3. записать строку ‘line-1’ в текстовый файл file1 (файл создастся)
git add . #4. добавить все файлы в index (staging area)
git commit -m ‘My 1 commit’ #5. зафиксировать измен