Git ветка перезаписывает master при слиянии, не предлагая конфликтов

У меня есть мастер-проект и одна ветка из него. Когда я объединяю master с branch, код в branch заменяет тот, что в master, и я хотел бы вставить только другой код из branch в master, или, по крайней мере, спросить, какой код я хочу сохранить. Вот один простой пример того, как я все настроил:

mkdir project
cd project
git init

внутри каталога проекта у меня есть один файл с именем index.php с этим кодом:

<?php

/**
* This is master code.
*/
class ClassName extends AnotherClass
{

function __construct(argument)
{
// this is from master
}
}

Тогда я делаю ветку:

git checkout -b my_branch

И я поместил этот код в index.php:

<?php

/**
* This is branch code.
*/
class ClassName extends AnotherClass
{

function __construct(argument)
{
// this is from branch
}
}

Затем я проверяю мастер и пытаюсь объединить:

git checkout master
git merge my_branch

И тогда ветвь код переопределит тот из мастера. В моем мастере у меня будет такой же код, как в филиале. Разве Git не должен предлагать мне выбрать, какой код оставить, или есть ли способ заставить это? Если нет, что я делаю не так?

Если я сделаю это изменение в коде филиала:

class ClassName extends AnotherClass => class ClassName extends MyClass

Затем git сделает рекурсивную стратегию слияния и примет MyClass от ветки и все остальное от хозяина.

Я не знаю, покажу ли я вам хорошие примеры, позвольте мне попытаться объяснить ситуацию еще раз:

1) у меня есть код в master что не существует в branch,
2) у меня есть код в branch что не существует в master,

Как я должен иметь дело с этим и не потерять эти разные коды как в master, так и в ветке? Если это не может произойти каким-то чистым, хорошо спланированным способом, могу ли я хотя бы заставить git спросить меня, что я хочу сделать с этими различиями? Я могу только сделать так, чтобы мастер переопределил ветку, и это плохо.

1

Решение

Слияние ветки означает, что вы хотите add changes предложено филиалом. Вы можете НЕ выборочно объединить ветку. Это объединено в целом.

Чтобы увидеть, что представляет собой различие между двумя ветками для просмотра перед объединением, запустите

git diff master my_branch

Если вы не чувствуете, что код в my_branch соответствует вашим стандартам ИЛИ ошибочен, не объединяйте его.

1

Другие решения

Если я правильно понимаю, то вы проверяете branch, заменив часть кода из master, а затем слияние branch в master,

Весь смысл создания ветки состоит в том, что вы можете вносить изменения в код, а затем объединять эти изменения в.

Может быть, пример поможет.

Допустим, у вас есть файл на master только содержание

This is good code

И тогда вы проверили branch и изменил файл, чтобы сказать

This is great code

Теперь вы оформить заказ master снова. Прямо сейчас файл

This is good code

Если вы объедините, то файл изменится на

This is great code

Однако, если перед объединением вы изменили файл, чтобы сказать

This is really amazing code

И затем попытался объединить, тогда git сообщит вам, что произошел конфликт, и не объединит эти файлы автоматически.

это может помочь вам получить концепцию. В основном потому, что master с тех пор не изменился branch git может предположить, что любые изменения были сделаны специально.

2

По вопросам рекламы [email protected]