2014-10-23 3 views
0

У меня есть файл, назовем его File A. Я печатаю что-то на первой строке. Затем я фиксирую его на главной ветке.Ветвь Переписывание главной ветви при слиянии git

Теперь я делаю другой филиал, позвольте назвать его BranchA. Теперь я открываю файл, удаляю то, что написал в первой строке, что-то другое в той же строке и передал его в BranchA.

Теперь i checkout к главной ветке, а затем слияние ветви с главной ветвью. Слияние завершено успешно, и когда я открываю файл, строка в BranchA перезаписывает строку на главной ветке.

Почему это происходит она не должна дать мне конфликт, потому что я меняюсь ту же линию на обеих ветвях, а затем пытается объединить их

ответ

1

сценарию вы описываете ожидаемое поведение.

Насколько я понимаю ваш вопрос у вас есть совершить график, который мог бы выглядеть следующим образом:

o---o <- master 
    \ 
     o <- A 

Если теперь объединить в мастер мерзавец сделает fast-forward слияние, которое effectivly просто меняет commit мастер точки на.
Поскольку дальнейших изменений на мастер, который отличается от A, нет необходимости сливаться.


Теперь давайте предположим, что мы имеем следующую совершить график:

o---o---o <- master 
    \ 
     o <- A 

В этом случае ваши ветви расходятся. У вас есть изменения на мастер, которые не указаны на A и у вас есть изменения на A которые не находятся на главном. Это типичная ситуация, когда требуется слияние.

Вы можете ознакомиться с главой книги gitpro Basic Branching and Merging, которая охватывает все это и многое другое.

+0

Вы имеете в виду, что вместо объединения двух коммитов git непосредственно переводит фиксацию из другой ветви в главную ветвь? –

+1

Git не перемещает фиксацию. В ветвях git есть только ** ссылка ** на конкретную фиксацию. Вы можете даже взглянуть на них, если вы откроете файл в '.git/refs/heads'. Это буквально файл, содержащий ключ * SHA1 *, идентифицирующий фиксацию. Git просто меняет эту ссылку. –

+0

В git каждый фиксатор сохраняет refence в своем родительском коммите (или parent commit ** s **, это определяет фиксацию слияния). Таким образом ваша история строится. –