How to Copy Commits From One Branch to Another?

Better Stack Team
Updated on August 12, 2024

Copying commits from one branch to another in Git can be done in several ways, depending on your needs and the complexity of your commit history. Here are some common methods:

1. Using git cherry-pick

git cherry-pick allows you to apply the changes from specific commits onto your current branch.

Steps:

  1. Switch to the Target Branch:

     
    git checkout target-branch
    
  2. Find the Commit Hashes:

    Identify the commit hashes you want to copy from the source branch. You can use git log to find them:

     
    git log source-branch
    
  3. Cherry-Pick the Commits:

    Apply each commit individually by using git cherry-pick with the commit hash:

     
    git cherry-pick <commit-hash>
    

    Example:

     
    git cherry-pick abc1234
    

    If you have multiple commits, you can cherry-pick them one by one or use a range:

     
    git cherry-pick <commit-hash1> <commit-hash2> <commit-hash3>
    

    Or for a range:

     
    git cherry-pick <commit-hash1>..<commit-hash2>
    
  4. Resolve Conflicts (if any):

    If there are conflicts, resolve them and then continue the cherry-pick process:

     
    git add <resolved-files>
    git cherry-pick --continue
    

2. Using git rebase

If you want to apply a series of commits from one branch to another, you can use git rebase. This method is useful when you want to move a sequence of commits onto a different branch.

Steps:

  1. Switch to the Source Branch:

     
    git checkout source-branch
    
  2. Rebase Onto the Target Branch:

     
    git rebase target-branch
    

    This command re-applies the commits from source-branch onto target-branch.

  3. Switch to the Target Branch:

     
    git checkout target-branch
    
  4. Merge the Rebased Branch:

    After rebasing, merge the changes into your target branch:

     
    git merge source-branch
    
  5. Resolve Conflicts (if any):

    If conflicts arise during the rebase or merge, resolve them as described previously.

3. Using git format-patch and git am

For more controlled or large-scale operations, you can create patches from commits and apply them to another branch.

Steps:

  1. Create Patch Files:

    Generate patch files from the commits you want to copy:

     
    git format-patch <commit-hash1>^..<commit-hash2>
    

    This will create a series of patch files in the current directory.

  2. Switch to the Target Branch:

     
    git checkout target-branch
    
  3. Apply the Patch Files:

    Apply the patches to the target branch:

     
    git am *.patch
    

    This applies all patch files in the current directory.

4. Using git checkout with b

For simple cases where you want to start a new branch from a specific commit and then work from there, you can use git checkout with -b.

Steps:

  1. Create a New Branch from a Commit:

     
    git checkout -b new-branch <commit-hash>
    

    This creates a new branch at the specified commit and checks it out.

  2. Merge Changes into Another Branch:

    If you want to incorporate these changes into another branch, you can then merge or rebase as needed:

     
    git checkout target-branch
    git merge new-branch
    

Summary

  • git cherry-pick: Apply specific commits to another branch.
  • git rebase: Reapply a series of commits onto another branch.
  • git format-patch and git am: Create and apply patches for more controlled copying.
  • git checkout -b: Create a new branch from a specific commit.

Choose the method that best suits your workflow and the complexity of the changes you need to copy.

Got an article suggestion? Let us know
Explore more
Git
Licensed under CC-BY-NC-SA

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Make your mark

Join the writer's program

Are you a developer and love writing and sharing your knowledge with the world? Join our guest writing program and get paid for writing amazing technical guides. We'll get them to the right readers that will appreciate them.

Write for us
Writer of the month
Marin Bezhanov
Marin is a software engineer and architect with a broad range of experience working...
Build on top of Better Stack

Write a script, app or project on top of Better Stack and share it with the world. Make a public repository and share it with us at our email.

community@betterstack.com

or submit a pull request and help us build better products for everyone.

See the full list of amazing projects on github