2015-05-26 3 views
0

В настоящее время я работаю над вторым филиалом, который называется NC12-changePassword.Различия между двумя ветвями после слияния: GIT

Были внесены изменения в ветвь master, которая обрабатывает дешифрование строки. Я потребовал, чтобы эти новые изменения были в состоянии реализовать новую функцию на моей ветке, поэтому я объединил изменения.

Я сделал git pull и не было конфликтов. Когда я запускаю git log, он показывает фиксацию слияния. Также, когда я запускаю git merge master, он говорит мне, что все в курсе.

Однако мой код не работает, и когда я запускаю git diff NC12-changePassword master, он перечисляет то, что находится в master, которого нет в NC12-changePassword. Это не имеет смысла для меня, потому что я объединил изменения, и поэтому все, что находится на хозяине, должно быть в NC12-changePassword.

Я понимаю, что моя ветка должна функционировать как master, и код должен работать нормально. Или я чего-то не хватает: - \.

ответ

3

и, следовательно, все, что в мастера должен быть в NC12-Changepassword

Это не то, что «слияние» означает, и, следовательно, не то, что git merge делает.

Давайте рассмотрим очень простой пример для иллюстрации. Предположим, вы сделали ветку от мастера и, как часть или даже все ветви, удалили блок кода и зафиксировали результат.

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

Позже вы получите работу Фреда в master и используйте git merge, чтобы принести свои изменения в мастерскую в вашу ветку. Git будет не вернул код, который вы удалили: он предполагает, что вы знали, что делаете тогда. Все, что он сделает, это обнаружить, что Fred добавил блок кода , и он добавит тот же самый блок в вашу ветку, где он ничего не делает, потому что это зависит от удаляемого вами блока.

Если вы сейчас сравниваете свою ветку с Fred's master, вы по-прежнему будете иметь удаленный блок кода: блок, который вы удалили. У вас не будет всего, который находится в этом master. (Ваш собственный master будет, вероятно, не имеет изменений Фреда либо, потому что в приведенном выше, мы никогда не упоминали вы получаете на вашmaster и приведении в его изменениях от HIS master.)

В сложных ситуациях, вы должны используйте свои собственные знания (которые всегда будут превышать git's), чтобы исправить слияния, которые семантически неверны. Git, в лучшем случае, заметит синтаксические столкновения, например: «эй, вы удалили этот блок кода, но Фред внес изменения в тот же самый блок, так как я, git, ничего не знаю о семантике, вам придется решить эту проблему конфликт». Но это происходит только в том случае, если вам посчастливилось иметь синтаксический конфликт. Если изменения Fred «вписываются», несмотря на ваши изменения, но ничего не делают из-за ваших изменений, git даже не заметит этого.

+0

Спасибо за объяснение. Очень полезно. – pls

Смежные вопросы