开发者

How do I merge a specific commit from one branch into another in Git?

开发者 https://www.devze.com 2023-03-13 15:41 出处:网络
I have BranchA which is 113 commits ahead of BranchB. But I only want the last 10 or so commits 开发者_如何学Gofrom BranchA merged into BranchB.

I have BranchA which is 113 commits ahead of BranchB.

But I only want the last 10 or so commits 开发者_如何学Gofrom BranchA merged into BranchB.

Is there a way to do this?


The git cherry-pick <commit> command allows you to take a single commit (from whatever branch) and, essentially, rebase it in your working branch.

Chapter 5 of the Pro Git book explains it better than I can, complete with diagrams and such. (The chapter on Rebasing is also good reading.)

Lastly, there are some good comments on the cherry-picking vs merging vs rebasing in another SO question.


SOURCE: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

The other way to move introduced work from one branch to another is to cherry-pick it. A cherry-pick in Git is like a rebase for a single commit. It takes the patch that was introduced in a commit and tries to reapply it on the branch you’re currently on. This is useful if you have a number of commits on a topic branch and you want to integrate only one of them, or if you only have one commit on a topic branch and you’d prefer to cherry-pick it rather than run rebase. For example, suppose you have a project that looks like this:

How do I merge a specific commit from one branch into another in Git?

If you want to pull commit e43a6 into your master branch, you can run

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

This pulls the same change introduced in e43a6, but you get a new commit SHA-1 value, because the date applied is different. Now your history looks like this:

How do I merge a specific commit from one branch into another in Git?

Now you can remove your topic branch and drop the commits you didn’t want to pull in.


If BranchA has not been pushed to a remote then you can reorder the commits using rebase and then simply merge. It's preferable to use merge over rebase when possible because it doesn't create duplicate commits.

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号