How to git cherrypick all changes introduced in specific branch

Background info:

Due to restrictions in workflow with out existing systems, we need to set up a somewhat unorthodox git process.

(patch)    A-B---F
             |   |
(hotfix)     C-D-E
                 |
(dev)      1-2-3-G

On the patch branch, there are some commits. The files here are similar but not identical to the ones on dev (sync scripts switch around the order of settings in many of the files, making them appear changed while they are functionally the same).

A fix is needed on this branch so a hotfix branch is created and worked on. This branch is then merged back into patch, so far, so good.

This same fix needs to be deployed to the dev branch so it stays relatively in sync with patch, but trying to merge the hotfix branch leads to git trying to merge all the unrelated and ‘unchanged’ files from A and B as well, rather than only C,D and E.

Question:

It seems that cherry-pick does what we want in terms of only getting changes from selected commits, but I would really like a way to cherry-pick all commits in a given branch at once, without having to look up the commit ids every time.

  • Git Merge Driver - How to find out full path of merged file?
  • Getting push reject when trying to push to a remote branch
  • How can I override the merge-base in a git merge?
  • How do I remove git's MERGE_MSG?
  • Really flatten a git merge
  • Partial squash-merge
  • git branch merging
  • Undo git merge of master into feature
  • One Solution collect form web for “How to git cherrypick all changes introduced in specific branch”

    It seems that cherry-pick does what we want in terms of only getting changes from selected commits, but I would really like a way to cherry-pick all commits in a given branch at once, without having to look up the commit ids every time.


    Using cherry-pick

    git cherry-pick allow you to pick any commits you made in any branch to any other branch. In your case you can simply checkout master branch and then cherry-pick all the commits from any branch that you wish (cherry-pick support ranges so you can specify start and end commit instead of list all the commits)

    This way you can control the way your commits will appear in the desired branch.

    for example:

    git cherry-pick ebe6942..905e279
    

    # Find out the range of commits you wish to re-add to your branch.
    # then use cherry-pick to add them back to the branch
    git cherry-pick start..end
    
    # If you wish to include the start commit as well add the ^
    # This will result in a cherry-pick of the start commit included as well 
    git cherry-pick start^..end
    

    How to find first commit of branch?

    git log

     # print out the latest commit (first one) of the given branch
     git log  --oneline | tail -1
    

    merge-base

    Use the base-merge command to find where did the branch was splitted from the original branch

    git merge-base A B
    
    Git Baby is a git and github fan, let's start git clone.