olegtaranenko olegtaranenko - 1 year ago 301
Git Question

git partial merge, not whole branch

I've read about some tricks with merge in Git: merging public and private branches while while keeping certain files intact in both branches and others and not found a solution.

In my case I'm feeling need to do opposite merge strategy. In parallel development I have to keep some files same across the arbitrary branches. From other side I do not want to do squash or no-commit merge, while difference are significant and could break current state of testing branch.

What I want something like

git checkout testing


git merge config.xml -b development
or
git merge config\*.xml -b development


I guess this is like
git merge-files ...
command, but second file delivered from the branch, not from the filesystem.
Is it possible? or may be there is a kind of workaround? submodules? attributes?

Thanks

Answer Source

There are a couple things you can do.

One, you can cherry-pick the changes you want, which applies only a single commit. For example, if there's a change that only touches config.xml, you can cherry-pick it with

$ git cherry-pick $COMMIT_ID_YOU_WANT

You could also just grab config.xml from the development branch:

$ git checkout testing
$ git checkout development -- config.xml

That'll get you the same version of config.xml that exists in the development branch, but note that it won't pull in the history of changes to the file.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download