I have master project and one branch made from it. When I merge master with branch, code in branch overwrites the one in master, and I would like to insert only different code from branch in master, or at least to be asked which code I want to keep. Here is one simple example of how I set up everything:
mkdir project
cd project
git init
inside project directory I have one file called index.php with this code:
/**
* This is master code.
*/
class ClassName extends AnotherClass
{
function __construct(argument)
{
// this is from master
}
}
Then I make branch:
git checkout -b my_branch
And I put this code inside index.php:
/**
* This is branch code.
*/
class ClassName extends AnotherClass
{
function __construct(argument)
{
// this is from branch
}
}
Then I checkout to master and try to merge:
git checkout master
git merge my_branch
And then branch code will override the one from master. In my master I will have same code like in branch. Shouldn't git offer me to chose which code to keep, or is there any way to force that ? If not, what I am doing wrong ?
If I make this change in branch code:
class ClassName extends AnotherClass => class ClassName extends MyClass
Then git would do recursive strategy merge, and would take MyClass from branch and keep everything else from master.
I do not know if I am showing you good examples, let me try to explain the situation once again, please bare with me:
1) I have some code in master that do not exists in branch.
2) I have some code in branch that do not exists in master.
How should I deal with this and not lose that different codes in both master and branch ? If that can not happen on some clean, good planned way, can I at least force git to ask me what I want to do with those differences ? I can only mange to make branch override master, and that is bad.
I am really confused. Thanks
解决方案
Merging a branch means that you want to add the changes suggested by the branch. You can NOT selectively merge a branch. It get's merged as a whole.
To see what is the diff b/w two branches for reviewing before merging, run
git diff master my_branch
If you don't feel like the code in the my_branch is up to your standards OR is errorenous, don't merge it.