Complete Guide to Merging Specific Commits in Git

Nov 24, 2025 · Programming · 8 views · 7.8

Keywords: Git merge | Specific commits | Version control

Abstract: This article provides an in-depth exploration of merging specific commits from a feature branch to the main branch in Git version control system. Through detailed analysis of git merge command usage, comparison with git cherry-pick limitations, and comprehensive operational procedures, it offers best practices for efficient code integration. The content includes practical code examples, common issue resolutions, and workflow recommendations for version control management.

Core Concepts of Git Merge Operations

In distributed version control systems, Git provides multiple approaches for managing code change integration. Understanding proper merge strategies becomes crucial when we need to merge specific commits from a feature branch to the main branch.

Problem Scenario Analysis

Consider this typical development scenario: a developer creates a new feature branch newbranch from the master branch and makes multiple commits on this branch. Now there's a requirement to merge all changes from newbranch except the last three commits back to the master branch. This requirement frequently occurs in team collaboration, especially when feature branches contain experimental or incomplete code.

Correct Usage of git merge Command

Git's merge command supports directly specifying particular commits to merge. The basic syntax is:

git checkout master
git merge <commit-id>

Here, <commit-id> represents the hash of the last commit from the target branch that you want to incorporate into your current branch. This commit hash can be viewed using the git log command or specified using relative references like HEAD~3.

Practical Operation Example

Assuming we need to merge all changes from newbranch up to the fourth-from-last commit, the detailed procedure is as follows:

# Switch to target branch
git checkout master

# View commit history of newbranch branch
git log newbranch --oneline

# Sample output:
# a1b2c3d Latest commit
# e4f5g6h Second-to-last commit  
# i7j8k9l Third-to-last commit
# m0n1o2p Fourth-to-last commit (target commit)

# Execute merge operation
git merge m0n1o2p

After executing this command, Git will merge all changes from the branch divergence point up to the specified commit m0n1o2p into the current branch.

Comparison with git cherry-pick

While git cherry-pick can also apply specific commits, its use cases and limitations differ from merge:

# Incorrect cherry-pick usage example
git cherry-pick ^^^^HEAD newbranch

# Correct cherry-pick usage (suitable for single commits)
git cherry-pick <commit-hash>

cherry-pick is more appropriate for selectively applying individual or a few commits, whereas merge is better suited for integrating a continuous series of commits.

Advanced Merge Techniques

For more complex merge scenarios, Git provides various options:

# Use --no-ff option to preserve merge history
git merge --no-ff <commit-id>

# Use -s option to specify merge strategy
git merge -s recursive <commit-id>

# Merge multiple specific commits (advanced usage)
git merge <commit1> <commit2> <commit3>

Conflict Resolution Strategies

Code conflicts may occur during merging, and Git offers comprehensive conflict resolution mechanisms:

# When merge generates conflicts, Git marks conflicting files
# After manual conflict resolution, execute:
git add <resolved-files>
git commit

Best Practice Recommendations

Based on practical development experience, we recommend the following best practices:

Tool Assistance and Extensions

Beyond command-line tools, modern IDEs like VSCode with extensions such as GitLens provide more intuitive merge operation interfaces. These tools simplify complex operations like commit selection and conflict resolution through graphical interfaces, enhancing development efficiency.

Conclusion

By correctly utilizing the git merge <commit-id> command, developers can precisely control the scope of code integration, preventing unnecessary changes from entering the main branch. This approach combines version control flexibility with team collaboration standardization, representing an indispensable skill in modern software development.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.