git Пример создания двух веток - с разными изменениями для теста объединения, без конфликта. Тестовый репозиторий
Primary tabs
Задача
Создать ситуацию, когда мы после какой-то истории ответвились от основной витке, создали коммит в новой ветке и параллельно за это время кто-то поправил основную. В нашем примере будет участвовать один текстовый файл somefie.txt
Т.е. такие шаги:
- До ответвления в файле имеем:
Строка 1 Строка 2
-
В новой ветке добавляем еще одну строку:
Строка 1 Строка 2 Строка 3
- И "параллельно" в основной ветке меняем первую строку:
Строка первая Строка 2
-- таким образом здесь перед слиянием (любым способом) у нас будет по одному не общему коммиту в каждой из двух веток.
Делаем
Посмотрим на практике:
- Создаем новый репозиторий:
- Создадим новый пустой репозиторий (просто отдельную папку на компьютере)
- Выполним в ней
git init
- Добавим в этот репозиторий файл somefie.txt
-
Для начала, создадим историю в главной ветке.
Мы находимся в основной ветке, давайте сделаем в ней пару коммитов:
- В наш файл добавим строку:
Строка 1
И закоммитимся:
git add . && git commit -m "master cmt 1"
- Добави вторую строку, так что файл теперь выглядит так:
Строка 1 Строка 2
И закоммитимся:
git add . && git commit -m "master cmt 2"
Ну что, пришло время посмотреть на историю измений. например так:
git log --oneline --name-only
Получим что-то вроде (хэши у вас могут быть другими):
a2ec666 (HEAD -> master) master cmt 2 somefile.txt 6dd2199 master cmt 1 somefile.txt
-- тут два коммита, отлично.
- В наш файл добавим строку:
-
Ответвимся ка теперь (надоже нам rebase где-то проверять), создадим новую ветку:
git checkout -b newbranch
Добавим в наш файл еще одну - третью строку:
Строка 1 Строка 2 Строка 3
и закоммитимся:
git add . && git commit -m "newbranch cmt 1"
Теперь глянем все коммиты:
git log --oneline --name-only
Получим три штуки:
4ac039a (HEAD -> newbranch) newbranch cmt 1 somefile.txt a2ec666 (master) master cmt 2 somefile.txt 6dd2199 master cmt 1 somefile.txt
А если отфильтровать только те, что после ответвления
git log --oneline --name-only master..
то только 1 коммит:
4ac039a (HEAD -> newbranch) newbranch cmt 1 somefile.txt
-
Последний этап - сэмулируем параллельные изменения в основной ветке, для этого:
- Переключимся на нее:
git checkout master - После чего наш файл перейдет в состояние:
Строка 1 Строка 2
поправим первую строчку:
Строка первая Строка 2
Сохраним файл и добавим третий коммит в основной ветке:
git add . && git commit -m "master cmt 3"
-
Глянем историю мастера (основной ветки):
git log --oneline --name-only
- вот у нас тут уже три коммита:
4394661 (HEAD -> master) master cmt 3 somefile.txt a2ec666 master cmt 2 somefile.txt 6dd2199 master cmt 1 somefile.txt
- Переключимся на нее:
Ну и начнем эксперимент.
Готово! Репозиторий переведен в состояние, описанное в начале этой заметки.
- Log in to post comments
- 787 reads