To safely merge a Git branch into master
(or main
), follow these steps to minimize conflicts and maintain a clean history:
1. Update Your Local master
Branch
Ensure your local master
branch is up-to-date with the remote:
git checkout master # Switch to the master branch
git pull origin master # Pull the latest changes from remote
2. Rebase Your Feature Branch (Optional but Recommended)
Rebase your feature branch onto master
to resolve conflicts early and linearize history:
git checkout feature-branch # Switch to your feature branch
git rebase master # Rebase onto the latest master
- Resolve conflicts during rebase if they occur.
- Force push the rebased branch (only if working alone on the branch):
git push origin feature-branch --force
3. Merge the Feature Branch into master
Use --no-ff
to ensure a merge commit (for traceability):
git checkout master # Switch back to master
git merge --no-ff feature-branch # Merge with a merge commit
4. Resolve Merge Conflicts (If Any)
If conflicts arise during the merge:
- Manually resolve conflicts in the affected files.
- Stage the resolved files:
git add <file1> <file2>
- Complete the merge:
git commit
5. Verify and Test
Run tests to ensure no regressions:
# Example: Run your test suite
npm test
# or
pytest
6. Push the Merged master
Branch
git push origin master
Alternative: Use a Pull Request (Recommended for Teams)
- Push your feature branch to the remote:
git push origin feature-branch
- Create a Pull Request (PR) on GitHub/GitLab for code review.
- Merge the PR via the platform’s UI (ensures CI/CD checks pass).
Key Notes
- Rebasing keeps history linear but rewrites commit hashes (avoid if others are using the branch).
- Merge commits preserve history but can create a non-linear timeline.
- Use
git log --graph --oneline
to visualize the merge history.
Example Workflow
# Update master
git checkout master
git pull origin master
# Rebase feature branch
git checkout feature-branch
git rebase master
# Fix conflicts, then force push (if safe)
# Merge into master
git checkout master
git merge --no-ff feature-branch
git push origin master
By rebasing first and using --no-ff
, you ensure a clean, conflict-resolved merge with clear history!