Git branching is a game-changer for WordPress plugin development. It helps teams work on features, fixes, and updates without risking the main codebase. Here’s why it matters:
- Isolated Workspaces: Develop new features or fixes safely.
- Improved Collaboration: Multiple developers can work simultaneously.
- Version Control: Track changes, roll back updates, and maintain stability.
Quick Steps to Get Started:
- Initialize a Git Repository:
cd wp-content/plugins/your-plugin-name git init git add . git commit -m "Initial plugin commit" - Set Up GitHub:
git remote add origin https://github.com/username/your-plugin-name.git git push -u origin main - Create a
.gitignoreFile: Exclude unnecessary files like/wp-admin/,wp-config.php, and/wp-content/uploads/.
Branch Management Basics:
- Create branches for tasks:
git checkout -b feature/new-feature git checkout -b bugfix/fix-issue - Switch between branches:
git switch branch-name - Resolve merge conflicts by editing files and committing changes:
git add . git commit -m "Resolve conflicts"
Release Management:
- Merge branches into
mainfor production:git merge --squash feature/branch-name git commit -m "Add feature description" - Tag versions for releases:
git tag -a v1.0.0 -m "Version 1.0.0" git push origin v1.0.0
Git branching keeps your code organized, stable, and ready for collaboration. Want to dive deeper? Follow along for detailed steps and best practices.
Git Branches Tutorial
Starting a Git Repository
Setting up a Git repository for your WordPress plugin is a smart move for maintaining code quality and managing version control. Studies show that teams using version control tools are 40% more productive [3], making it a must for effective plugin development.
Create Your First Repository
Here’s how to get started:
- Initialize Your Repository
Navigate to your plugin directory inwp-content/plugins/, open your terminal, and run these commands:cd wp-content/plugins/your-plugin-name git init git add . git commit -m "Initial plugin commit" - Link with GitHub
After creating a repository on GitHub with the same name as your plugin, connect it to your local repository:git remote add origin https://github.com/username/your-plugin-name.git git push -u origin main
Set Up WordPress .gitignore
A proper .gitignore file keeps unnecessary files out of your repository. Use this example:
# WordPress core files /wp-admin/ /wp-includes/ /wp-*.php /xmlrpc.php /license.txt # Configuration files wp-config.php .htaccess # Upload directory /wp-content/uploads/ # Log files *.log error_log
This setup, last updated in December 2021 [4], ensures you’re tracking only your plugin files while excluding WordPress core files and sensitive data.
Best Practices for Git Repositories
To make the most of your Git setup:
- Keep your plugin in its own repository, separate from the WordPress installation.
- Write clear and descriptive commit messages.
- Push changes regularly to avoid data loss.
- Store sensitive information, like API keys, in separate files.
With 87% of developers recognizing version control as essential to their workflow [3], following these steps will set you up for smooth and collaborative plugin development.
Up next: managing branches effectively.
Branch Management Basics
Managing Git branches effectively improves code quality and teamwork, especially in WordPress plugin development.
Making New Branches
Creating a new branch gives you a separate space to work on features or fixes without affecting the main codebase. Use these commands:
# Create and switch to a new feature branch git checkout -b feature/custom-widget # Create a branch for fixing a specific issue git checkout -b issue/451-broken-admin-panel
Here’s a quick guide to branch types and their purposes:
| Type | Purpose | Example |
|---|---|---|
| feature/ | For new functionality | feature/user-roles |
| bugfix/ | For bug fixes | bugfix/login-error |
| hotfix/ | For urgent fixes | hotfix/security-patch |
| test/ | For experimental work | test/performance-boost |
Moving Between Branches
Switching branches lets you work on different tasks without disrupting your current progress. Always check for uncommitted changes before switching:
# Check the current branch and view changes git status # Switch to an existing branch git switch development # Create and switch to a new branch git switch -c feature/new-shortcode
If there are uncommitted changes, Git will block the switch to prevent overwriting your work.
Branch Naming Rules
Following consistent naming rules makes it easier to manage and identify branches:
- Issue-based branches: Use "issue/ISSUEID-description" for branches tied to a specific issue. For example, a branch fixing an editor crash could be named
issue/1000-editor-crash. - Feature or fix branches: When no issue number applies, use descriptive prefixes like:
feature/publishing-postsfix/notifications-crashwip/experimental-blocks
- General tips for naming:
- Use dashes (
-) to separate words. - Include issue numbers when relevant.
- Keep names short but clear.
- Avoid starting branch names with numbers.
- Use dashes (
Up next, learn how to handle daily branch changes to keep your development workflow smooth.
sbb-itb-77ae9a4
Daily Branch Operations
Daily branch operations are key to smooth plugin development and efficient release management.
Save Changes to Branches
Here’s how to manage and save code changes effectively:
# Stage specific file changes git add includes/admin-panel.php # Stage all changes in the current directory git add . # Commit changes with a clear, descriptive message git commit -m "Add custom widget settings panel"
Keep commits focused. For example, when updating the admin interface, separate functional updates from styling changes:
# Commit functional updates first git add includes/settings-api.php git commit -m "Implement new settings API endpoints" # Then commit styling updates git add assets/css/admin-styles.css git commit -m "Update admin panel styling"
Sync Remote Branches
Use these commands to keep your local and remote branches in sync:
# Update local references and clean up stale branches git fetch --prune # Pull the latest changes from the remote branch git pull origin feature/custom-widget # Push your local changes to the remote branch git push origin feature/custom-widget
| Operation | Command | Purpose |
|---|---|---|
| Fetch | git fetch --prune |
Refresh local references and remove old branches |
| Pull | git pull origin branch-name |
Retrieve and merge changes from the remote branch |
| Push | git push origin branch-name |
Upload local changes to the remote branch |
After syncing, handle any merge conflicts that may occur.
Fix Merge Conflicts
Merge conflicts are a natural part of collaborative development. Here’s how to handle them:
- Check for conflicted files:
git status - Open the conflicted file and locate conflict markers:
<<<<<<< HEAD function wpw_custom_widget() { // Your local changes ======= function wpw_custom_widget() { // Remote changes >>>>>>> feature/custom-widget - Edit the file to resolve the conflict. Keep or combine the necessary changes, then remove the conflict markers.
- Stage and commit the resolved changes:
git add includes/custom-widget.php git commit -m "Resolve merge conflicts in custom widget"
"When a merge isn’t resolved automatically, Git leaves the index and the working tree in a special state that gives you all the information you need to help resolve the merge." – Git Manual [6]
Release Management
Getting your plugin ready for release involves merging code, tagging versions, and updating references.
Merge Code into Main Branch
Start by merging your feature branch into the main branch using a pull request:
# Switch to the main branch git checkout main # Merge features into main using a squash commit for a clean history git merge --squash feature/custom-widget # Commit with a clear and concise message git commit -m "Add custom widget functionality with settings panel"
Pull requests are a great way to review and test features in a staging branch before moving them to the main branch.
| Branch Type | Purpose | Merge Direction |
|---|---|---|
| Feature | New functionality | Feature → Staging |
| Staging | Pre-release testing | Staging → Main |
| Main | Production-ready code | Release tags only |
Version Tagging
Once the code is merged, tag the release using semantic versioning:
# Create an annotated tag for the new version git tag -a v1.2.0 -m "Version 1.2.0: Custom widget implementation" # Push the tag to the remote repository git push origin v1.2.0
If you’re using GitHub, follow these steps:
- Go to the "Releases" section and create a new release.
- Write detailed release notes, including:
- New features
- Bug fixes
- Breaking changes
- Acknowledgment of contributors
- Attach the compiled plugin ZIP file to the release.
After tagging, update your plugin files to reflect the new version.
Plugin Update Guidelines
Ensure a smooth user update experience by updating version references:
# Update version numbers in the main plugin file and readme.txt sed -i 's/Version: 1.1.0/Version: 1.2.0/' plugin-name.php sed -i 's/Stable tag: 1.1.0/Stable tag: 1.2.0/' readme.txt
"At this time you have the opportunity to verify what will be commit, the working copy will be in your system’s temporary directory." – toolstack [7]
Tools like WP Freighter also highlight the importance of version updates, packaging, and manifest adjustments. Automating SVN synchronization with a release script can simplify the process and maintain consistency with the official repository.
Next Steps
Summary of Branch Basics
Consider diving into advanced Git workflows like Git Flow [2]. This model offers a structured way to manage features, releases, and urgent fixes. It’s especially useful for WordPress plugin development, where maintaining multiple versions and addressing critical issues is crucial.
Here are some WordPress tools to streamline your workflow:
| Tool | Key Features | Best Use Case |
|---|---|---|
| Gitium | Continuous deployment, multi-branch management | Production/staging environments |
| Revisr | In-WordPress Git management, branch switching | Simple repository management |
| VersionPress | Database version control, branch merging | Complex database changes |
For more detailed guidance, check out the resources below.
WP Winners: A Resource for WordPress Developers
WP Winners provides resources specifically for WordPress plugin developers:
"If you’re a developer & still manage your WordPress sites without Git, we highly encourage you to explore the benefits of the Bedrock approach and adopt these modern WordPress management practices. They will not only improve your development workflow but also make your WordPress sites easier to maintain in the long run." – RunCloud Team [1]
Tools like RunCloud can integrate with Git-based projects to manage environment-specific configurations and ensure smooth deployments [1].
Here are some practices to refine your development process:
- Focus on small, specific commits that follow the Single Responsibility Principle [5].
- Use feature branches to handle larger changes [2].
- Create release branches to prepare for new versions [2].
- Set up hotfix branches to quickly address critical production issues [2].

