Background: We use github for our project and I work on my own fork of our main repository. We use rebase instead of merge to avoid large merge commits.
Scenario: The way I want to work is like this:
- When implementing a new feature, create a local branch of my fork's master and put in my changes there. I and others in the group make many small commits, so there will almost always be multiple commits that affect the same file on the branch.
- Push the local branch to my fork so I have a remote copy of what I am working on (I don't want to have all my changes lost if my laptop dies or is lost. I try to do this at the end of each day).
- If it takes a long time to finish the feature, I occasionally rebase on my fork's master to make sure that there has been no changes that could break my feature. This usually works ok.
- To keep the remote copy of the branch up to date, I push my local branch to that after the rebase.
Problem: Step 4 is where I get the problems. I almost always have to deal with non-fast-forwarded commits and use git push --force.
I've looked at
Git: how to maintain permanent parallel branches
How to maintain (mostly) parallel branches with only a few difference
and haven't found a way to make my workflow work. Doing a google search on git workflows mostly returns results that assume that you all work on local branches and don't keep a remote copy on github (e.g. http://nvie.com/posts/a-successful-git-branching-model/).
I'm relatively new to Git, so I'd like to know if I am missing something here. I'd like to be able to do step 4 without a --force. An alternate workflow that still allows me to use rebase instead of merge and keep a remote copy of my local branch would also be very useful.