DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Top 35 Git Commands With Examples
  • Git Reset HEAD
  • Developer Git Commit Hygiene
  • Mastering Git

Trending

  • How to Format Articles for DZone
  • Prioritizing Cloud Security Risks: A Developer's Guide to Tackling Security Debt
  • Strategies for Securing E-Commerce Applications
  • Data Lake vs. Warehouse vs. Lakehouse vs. Mart: Choosing the Right Architecture for Your Business
  1. DZone
  2. Testing, Deployment, and Maintenance
  3. Deployment
  4. How To Use Git Cherry-Pick to Apply Selected Commits

How To Use Git Cherry-Pick to Apply Selected Commits

In this guide, you will learn how to use the Git cherry-pick command to apply specific commits from one branch to another.

By 
Rajeev Bera user avatar
Rajeev Bera
DZone Core CORE ·
Jun. 07, 23 · Tutorial
Likes (1)
Comment
Save
Tweet
Share
3.5K Views

Join the DZone community and get the full member experience.

Join For Free

Git is a powerful tool for developers, enabling them to track changes in their code, collaborate with others, and manage different versions of a code file. 

A key feature of Git is the ability to cherry-pick commits — selectively applying changes from one branch to another. This tutorial explores using the Git cherry-pick command to apply selected commits.

In this guide, you will learn how to use the Git cherry-pick command to apply specific commits from one branch to another.

By the end of this post, you'll be able to navigate through your Git commits history, selectively apply changes, and resolve any conflicts that arise during this process.

Step 1: Understanding Git Commits and Cherry-Pick

Before we dive into the practical aspect of using the Git cherry-pick command, it's crucial to understand the concepts of Git commits and what cherry-picking in Git entails.

Understanding Git Commits

In Git, a commit is a snapshot of your repository at a certain point in time. It includes all the changes you've made since the last commit. Each commit in Git has a unique hash identifier, which is a string of alphanumeric characters generated by a hashing algorithm. This hash serves as an address that allows Git to recall, compare, or manipulate the commit later.

By creating commits, you're effectively saving different versions of your code file. These versions can be reviewed, compared, and even reverted, offering great flexibility and control over your project's development.

Understanding Git Cherry-Pick

Git cherry-pick is a powerful command that enables you to "pick" a commit from one branch and apply it to another branch. This can be very useful in several scenarios:

  •  You made a commit on the wrong branch by mistake and want to apply that commit to the correct branch.
  • You're working on a feature branch and made a bug fix that also needs to be on the main branch.
  •  You want to avoid merging an entire branch, but there's a specific commit on that branch that you want to include in your current branch.

It's worth noting that the cherry-pick operation does not remove the commit from the source branch. Instead, it creates a new commit on the target branch that includes the changes from the cherry-picked commit. This way, the history of both branches remains intact.

In the following steps, you will learn how to use the Git cherry-pick command.

Understanding the basic concepts of Git commits and cherry-pick is the first step towards leveraging the power of version control in Git.

Step 2: Using Git Cherry-Pick on a Single Commit

Now that we have a foundational understanding of Git commits and cherry-pick, let's use the cherry-pick command. In this step, you will apply a single commit from one branch to another.

Switch to the Target Branch

Before you cherry-pick a commit, ensure you're on the branch where you want to apply the commit. Use the git checkout command to switch to this branch:

 
git checkout <target-branch-name>


Replace <target-branch-name> with the name of your target branch.

Identify the Commit Hash

Next, you need to identify the commit you want to cherry-pick. You can look at your commit history with the git log command. This command will show you a list of all commits, each with its unique hash, author, and commit message.

 
git log


You'll see an output similar to the following:

 
commit d4e7618b062bfbeb8f79f430afe5a69a2c2b3396 (HEAD -> main)

Author: Your Name <yourname@example.com>

Date:   Wed Feb 9 14:00:19 2023 -0500

    Fixed the bug in the login feature

commit c3e5749b64e4d3f93f3d5c6e6c5056757e8a74b1

Author: Your Name <yourname@example.com>

Date:   Tue Feb 8 11:25:03 2023 -0500

    Added new feature


From the git log output, identify the commit's hash you want to cherry-pick. The hash is the alphanumeric string after the word "commit." In this case, if we wanted to cherry-pick the commit where we fixed a bug, we'd copy the hash `d4e7618b062bfbeb8f79f430afe5a69a2c2b3396`.

Apply the Commit With Git Cherry-Pick

Now that you have the commit hash, you can apply this commit to your current branch using the git cherry-pick command followed by the commit hash:

git cherry-pick d4e7618b062bfbeb8f79f430afe5a69a2c2b3396

Replace d4e7618b062bfbeb8f79f430afe5a69a2c2b3396 with the hash of your commit.

Once you run this command, Git will apply the changes from the specified commit to your current branch and create a new commit for these changes.

You've now successfully cherry-picked a single commit! In the following steps, you will learn how to cherry-pick multiple commits and resolve conflicts during the cherry-picking process.

Step 3: Using Git Cherry-Pick on Multiple Commits

In the previous step, we learned how to use git cherry-pick to apply a single commit from one branch to another. But what if you want to apply multiple commits? In this step, we'll explore how you can cherry-pick multiple commits.

Switch to the Target Branch

As with cherry-picking a single commit, ensure you're on the branch where you want to apply the commits. Use the git checkout command to switch to this branch:

 
git checkout <target-branch-name>


Replace <target-branch-name> with the name of your target branch.

Identify the Commit Hashes

Next, you need to identify the commits you want to cherry-pick. Use the git log command to view your commit history and the corresponding commit hashes.

 
git log


This command will show you an output similar to the following:

 
commit d4e7618b062bfbeb8f79f430afe5a69a2c2b3396 (HEAD -> main)

Author: Your Name <yourname@example.com>

Date:   Wed Feb 9 14:00:19 2023 -0500

    Fixed the bug in the login feature

commit c3e5749b64e4d3f93f3d5c6e6c5056757e8a74b1

Author: Your Name <yourname@example.com>

Date:   Tue Feb 8 11:25:03 2023 -0500

    Added new feature


From the git log output, identify the hashes of the commits you want to cherry-pick. The hashes are the alphanumeric strings that appear after the word "commit."

Apply the Commits With Git Cherry-Pick

Now that you have the commit hashes, you can apply these commits to your current branch using the git cherry-pick command followed by the commit hashes:

 
git cherry-pick d4e7618b062bfbeb8f79f430afe5a69a2c2b3396 c3e5749b64e4d3f93f3d5c6e6c5056757e8a74b1


Replace d4e7618b062bfbeb8f79f430afe5a69a2c2b3396 and c3e5749b64e4d3f93f3d5c6e6c5056757e8a74b1 with the hashes of your commits.

Note: Git applies the commits in the order you provide them. So, in the command above, Git will first apply commit d4e7618b062bfbeb8f79f430afe5a69a2c2b3396, and then apply commit c3e5749b64e4d3f93f3d5c6e6c5056757e8a74b1. 

Once you run this command, Git will apply the changes from the specified commits to your current branch and create a new commit for these changes.

Congratulations! You've now successfully cherry-picked multiple commits! In the next step, you will learn how to resolve conflicts during cherry-picking.

Step 4: Resolving Conflicts During Cherry-Picking

During the process of cherry-picking commits from one branch to another, conflicts can arise. These conflicts usually occur when the changes in the commit you're trying to git cherry-pick contradict the changes already in your current branch. Git cannot decide which change to accept, so a conflict arises.

In this step, you'll learn how to resolve conflicts during cherry-picking.

Let's assume you're cherry-picking a commit, and a conflict has occurred. Git will pause the cherry-picking process and give you an error message similar to this:

 
error: could not apply fa39187... some commit message

hint: after resolving the conflicts, mark the corrected paths

hint: with 'git add <paths>' or 'git rm <paths>'

hint: and commit the result with 'git commit.'


Identifying and Viewing Conflicts

To identify the files that are causing conflicts, use the git status command:

 
git status


Git will show you a list of the files that are causing conflicts. They are usually marked as "unmerged."

You can then open these files with your preferred text editor. Inside the files, you'll find the conflicting changes marked in the following way:

 
<<<<<<< HEAD

changes made on the current branch

=======

changes made in the commit you're cherry-picking

>>>>>>> name of the commit you're cherry-picking


Resolving the Conflicts

Resolving the conflict involves deciding which changes to keep. You may keep the changes in the current branch, the changes in the commit you're cherry-picking, or a combination of both.

Edit the file to merge the changes manually. Once you've made your decision, remove the conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) and save the file.

Continuing the Cherry-Pick

After resolving the conflict in a file, you need to mark it as resolved with Git. Use the `git add` command followed by the filename:

 
git add filename


Once you've resolved all conflicts and marked the files as resolved, you can continue the cherry-pick process with the following:

 
git cherry-pick --continue


Git will then create a new commit with the changes from the cherry-picked commit. If there are no more conflicts, the cherry-pick operation will be complete. If there are more conflicts with the next commit (when cherry-picking multiple commits), the process will pause again, allowing you to resolve these conflicts.

Aborting the Cherry-Pick

If you decide not to continue with the cherry-pick, you can abort the operation using:

 
git cherry-pick --abort


That command will stop the cherry-picking process and bring your branch back to its state before you start the cherry-pick.

Remember, conflict resolution in Git involves a good understanding of the changes that have been made and how they should merge together. Always review the code and test the application after resolving conflicts to ensure everything works as expected.

Conclusion

In this article, you learned how to use the Git cherry-pick command to apply specific commits from one branch to another. Now you can selectively pull changes into your current working branch, enhancing your Git workflow.

It's important to remember that while cherry-pick is a powerful tool, there are better methods for integrating changes from one branch to another. Merge and rebase offer alternative approaches that maintain a clearer history of your project's development.

Git Command (computing) Commit (data management)

Opinions expressed by DZone contributors are their own.

Related

  • Top 35 Git Commands With Examples
  • Git Reset HEAD
  • Developer Git Commit Hygiene
  • Mastering Git

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!