Skip to content

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:

bash
git checkout -b NEW_BRANCH_NAME

This command is shorthand for:

bash
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:

bash
git switch -c NEW_BRANCH_NAME

Or the full version:

bash
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:

bash
git checkout EXISTING_BRANCH_NAME

Or using the newer syntax:

bash
git switch EXISTING_BRANCH_NAME

Verifying Your Current Branch

After switching branches, verify your current working branch with:

bash
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:

bash
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:

bash
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:

bash
# 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
bash
# Traditional method
git checkout -b feature-auth

# Modern method
git switch -c feature-auth
bash
# Go to main branch
git switch main

# Return to feature branch
git switch feature-auth
bash
# 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+) or git checkout -b NEW_BRANCH to create and switch
  • Use git switch BRANCH_NAME or git 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.