How to use git merge

I have a remote Git server, here is the scenario which I want to perform:

  • For each bug/feature I create a different Git branch

  • I keep on committing my code in that Git branch with un-official Git messages

  • In top repository we have to do one commit for one bug with official Git message

  • So how can I merge my branch to remote branch so that they get just one commit for all my check-ins (I even want to provide commit message for this)?


    Say your bug fix branch is called bugfix and you want to merge it into master :

    git checkout master
    git merge --squash bugfix
    git commit
    

    This will take all the commits from the bugfix branch, squash them into 1 commit, and merge it with your master branch.


    Explanation :

    git checkout master
    

    Switches to your master branch.

    git merge --squash bugfix
    

    Takes all the commits from the bugfix branch and merges it with your current branch.

    git commit
    

    Creates a single commit from the merged changes.

    Omitting the -m parameter lets you modify a draft commit message containing every message from your squashed commits before finalizing your commit.


    You want to merge with the squash option. That's if you want to do it one branch at a time.

    git merge --squash feature1
    

    If you want to merge all the branches at the same time as single commits, then first rebase interactively and squash each feature then octopus merge:

    git checkout feature1
    git rebase -i master
    

    Squash into one commit then repeat for the other features.

    git checkout master
    git merge feature1 feature2 feature3 ...
    

    That last merge is an "octopus merge" because it's merging a lot of branches at once.

    Hope this helps


    What finally cleared this up for me was a comment showing that:

    git checkout main
    git merge --squash feature
    

    is the equivalent of doing:

    git checkout feature
    git diff main > feature.patch
    git checkout main
    patch -p1 < feature.patch
    git add .
    

    When I want to merge a feature branch with 105(!!) commits and have them all squashed into one, I don't want to git rebase -i origin/master because I need to separately resolve merge conflicts for each of the intermediate commits (or at least the ones which git can't figure out itself). Using git merge --squash gets me the result I want, of a single commit for merging an entire feature branch. And, I only need to do at most one manual conflict resolution.

    链接地址: http://www.djcxy.com/p/668.html

    上一篇: 你如何停止在Git中跟踪远程分支?

    下一篇: 如何使用git merge