can't push to branch after rebase

前端 未结 6 653
走了就别回头了
走了就别回头了 2021-01-29 17:28

We use git and have a master branch and developer branches. I need to add a new feature and then rebase the commits to master, then push master to CI server.

The problem

6条回答
  •  灰色年华
    2021-01-29 18:10

    First, you and those you're working with need to agree whether a topic/devel branch is for shared development or just your own. Other developers know not to merge on my development branches because they'll be rebased at any time. Usually the workflow is as follows:

    o-----o-----o-----o-----o-----o       master
     \
       o-----o-----o                      devel0
                    \
                      o-----o-----o       devel1
    

    Then to stay up-to-date with remote I'll do the following:

     git fetch origin
     git checkout master
     git merge --ff origin/master
    

    I do this for two reasons. First because it allows me to see if there are remote changes without needing to switch from my devel branch. Second it's a safety mechanism to make sure I don't overwrite any un-stashed/committed changes. Also, if I can't fast-forward merge to the master branch that means either someone has rebased the remote master (for which they need to be flogged severely) or I accidentally committed to master and need to clean up my end.

    Then when remote has changes and I've fast forwarded to the latest I'll rebase:

    git checkout devel0
    git rebase master
    git push -f origin devel0
    

    Other developers then know they'll need to rebase their devel branches off my latest:

    git fetch 
    git checkout devel1
    git rebase /devel0
    

    Which results in much cleaner history:

    o-----o                                 master
           \
             o-----o-----o                  devel0
                          \
                            o-----o-----o   devel1
    

    Don't merge commits back and forth at your whim. Not only does it create duplicate commits and make history impossible to follow, finding regressions from a specific change becomes near impossible (which is why you're using version control in the first place, right?). The problem you're having is the result of doing just this.

    Also it sounds like other developers may be making commits to your devel branches. Can you confirm this?

    The only time to merge is when your topic branch is ready to be accepted into master.

    On a side note. If multiple developers are committing to the same repository you should all consider having named branches to distinguish between developers devel branches. For example:

    git branch 'my-name/devel-branch'
    

    So all developers topic branches reside within their own nested set.

提交回复
热议问题