Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git merge hotfix branch into feature branch

Let’s say we have the following situation in Git:

  1. A created repository:

    mkdir GitTest2 cd GitTest2 git init 
  2. Some modifications in the master take place and get committed:

    echo "On Master" > file git commit -a -m "Initial commit" 
  3. Feature1 branched off master and some work is done:

    git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1" 
  4. Meanwhile, a bug is discovered in the master-code and a hotfix-branch is established:

    git checkout master git branch hotfix1 git checkout hotfix1 
  5. The bug is fixed in the hotfix branch and merged back into the master (perhaps after a pull request/code review):

    echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1 
  6. Development on feature1 continues:

    git checkout feature1 

Say I need the hotfix in my feature branch, maybe because the bug also occurs there. How can I achieve this without duplicating the commits into my feature branch?

I want to prevent to get two new commits on my feature branch which have no relation to the feature implementation. This especially seems important for me if I use pull requests: All these commits will also be included in the pull request and have to be reviewed although this has already been done (as the hotfix is already in the master).

I can not do a git merge master --ff-only: "fatal: Not possible to fast-forward, aborting.", but I am not sure if this helped me.

like image 204
theomega Avatar asked Jun 06 '13 07:06

theomega


People also ask

How do I merge main branch into feature branch GitHub?

In GitHub Desktop, click Current Branch. Click Choose a branch to merge into BRANCH. Click the branch you want to merge into the current branch, then click Merge BRANCH into BRANCH. Note: If there are merge conflicts, GitHub Desktop will warn you above the Merge BRANCH into BRANCH button.

How do I merge a branch into another branch?

To merge branches locally, use git checkout to switch to the branch you want to merge into. This branch is typically the main branch. Next, use git merge and specify the name of the other branch to bring into this branch. This example merges the jeff/feature1 branch into the main branch.


1 Answers

How do we merge the master branch into the feature branch? Easy:

git checkout feature1 git merge master 

There is no point in forcing a fast forward merge here, as it cannot be done. You committed both into the feature branch and the master branch. Fast forward is impossible now.

Have a look at GitFlow. It is a branching model for git that can be followed, and you unconsciously already did. It also is an extension to Git which adds some commands for the new workflow steps that do things automatically which you would otherwise need to do manually.

So what did you do right in your workflow? You have two branches to work with, your feature1 branch is basically the "develop" branch in the GitFlow model.

You created a hotfix branch from master and merged it back. And now you are stuck.

The GitFlow model asks you to merge the hotfix also to the development branch, which is "feature1" in your case.

So the real answer would be:

git checkout feature1 git merge --no-ff hotfix1 

This adds all the changes that were made inside the hotfix to the feature branch, but only those changes. They might conflict with other development changes in the branch, but they will not conflict with the master branch should you merge the feature branch back to master eventually.

Be very careful with rebasing. Only rebase if the changes you did stayed local to your repository, e.g. you did not push any branches to some other repository. Rebasing is a great tool for you to arrange your local commits into a useful order before pushing it out into the world, but rebasing afterwards will mess up things for the git beginners like you.

like image 170
Sven Avatar answered Oct 06 '22 13:10

Sven