Git Branching: Create, Switch, and Manage Branches
Problem Overview
When working with Git, you'll often need to create separate branches for different features or fixes while keeping your changes isolated. A common scenario occurs when you've made changes to your project but haven't committed them yet, and you need to start working on something else without disrupting your current work.
Core Concepts
Git branches allow you to diverge from the main development line and work independently. You can create multiple branches for different features, experiments, or fixes, then merge them back when ready.
Creating and Switching Branches
Method 1: The Traditional Approach (git checkout -b
)
The classic way to create and switch to a new branch:
git checkout -b NEW_BRANCH_NAME
This command is shorthand for:
git branch NEW_BRANCH_NAME # Create the branch
git checkout NEW_BRANCH_NAME # Switch to the branch
TIP
This method works in all versions of Git and is widely understood by developers.
Method 2: The Modern Approach (git switch
)
Since Git version 2.23, a more intuitive command was introduced:
git switch -c NEW_BRANCH_NAME
Or the full version:
git switch --create NEW_BRANCH_NAME
INFO
The git switch
command was specifically designed for branch operations, making it clearer and less error-prone than the multipurpose git checkout
.
Switching Between Existing Branches
To move between branches you've already created:
git checkout EXISTING_BRANCH_NAME
Or using the newer syntax:
git switch EXISTING_BRANCH_NAME
Verifying Your Current Branch
After switching branches, verify your current working branch with:
git branch
This command lists all local branches and highlights the currently active one with an asterisk (*
).
Best Practices and Considerations
WARNING
Always check your working directory status before switching branches:
git status
If you have uncommitted changes, Git will either:
- Carry them to the new branch (if they don't conflict)
- Prevent the switch and warn you to commit or stash changes first
DANGER
Uncommitted changes that conflict with the target branch will prevent switching. Either commit your changes or use git stash
to temporarily save them.
Pushing Branches to Remote
When you're ready to share your branch with others:
git push origin NEW_BRANCH_NAME
This uploads your local branch to the remote repository (typically named "origin").
Workflow Example
Here's a typical workflow for the scenario described in the question:
# Check current status
git status
# Create and switch to new feature branch
git switch -c new-feature
# Work on your new feature, make commits
# ...
# Switch back to original branch
git switch main
# Continue working on your previous changes
# ...
# When ready, push both branches
git push origin new-feature
git push origin main
Code Group: Complete Branch Management Examples
# Traditional method
git checkout -b feature-auth
# Modern method
git switch -c feature-auth
# Go to main branch
git switch main
# Return to feature branch
git switch feature-auth
# Push branch to remote
git push origin feature-auth
# Track remote branch (after first push)
git branch --set-upstream-to=origin/feature-auth feature-auth
Visualizing Branch Operations
The following diagram shows the branch creation and switching process:
Summary
- Use
git switch -c NEW_BRANCH
(Git 2.23+) orgit checkout -b NEW_BRANCH
to create and switch - Use
git switch BRANCH_NAME
orgit checkout BRANCH_NAME
to switch between existing branches - Always check
git status
before switching branches - Commit or stash changes to avoid conflicts when switching
- Use
git push origin BRANCH_NAME
to share your branch with others
By following these practices, you can efficiently manage multiple lines of development without interfering with your main codebase or losing work in progress.