Okay, git lovers, I have an incredibly simple problem but so
far the only working solution is a kludge. I'm hoping
someone can tell me what the elegant way to solve this
I'm working with three branches keeping configuration
information for our environment. master is where our
production configs live. staging is a branch where we merge
changes and test them in our staging environment. Once
tested, they get cherrypicked to master.
base_url is where I've been working on a new change that
spans several commits. It was branched off of staging.
After completion, I merged the changes into the staging
branch and tested. So far so good.
Now I want to merge my branch into master. How do I do that?
Here's an idealized diagram of the branch relationships. In
reality, sometimes changes go into master before staging.
master staging base_url
| | merge | ___
| cherrypicks +<-------+ ^
+<------------+ | |
| (cp) | | How do I merge these to master?
+<------------+ branch | |
| (cp) +------->+ _V_
| branch |
So far everything I've tried with git rebase or git merge
seems to be sending changes from the staging branch that
were present before I branched to base_url into master. I
don't want that. I did my changes on a separate branch so I
could merge just my changes to both staging and master later.
Here's the kludge that did work:
git checkout base_url
# Manually find the last commit in staging before I branched
git format-patch [COMMIT ID FROM ABOVE]
git checkout master
git am [patch 0001 0002 0003....etc]
The two things that I find too hacky about this solution are:
- using git log to find the branch point. git should
know where I branched from staging... I just need to tell it
that I want to pull changes from the branch point forward
somehow and it should find the proper commit id.
- generating patches and then applying them. git should
be able to do this without generating "temporary files" like
this. The deltas are in the repo, why pull them out into
I have copies of my repository before I "fixed" it with the
patch commands. So send me your recipes and I'll see if any
of them work. Once we have a winner, I'll post strategies
that worked and ones that didn't.
Of course, even after I know how to do this, there's still
all sorts of follow on questions -- like, what happens if
this new feature took a long time and I needed to remerge
the base_url branch with staging in the middle?
a.badgergmail.com or abadger1999 on irc.freenode.net