Git
Version Control
Git Branching
Git Checkout
Code Management

git switch branch without discarding local changes

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

Introduction

Git can switch branches while keeping your uncommitted changes, but only when those changes can be applied safely on the target branch. If the destination branch would overwrite the same paths in incompatible ways, Git stops and forces you to resolve the situation instead of silently losing work.

That means the right answer is not always "just switch." First understand whether your changes are compatible, then choose the safest workflow for your case.

When a Plain Branch Switch Works

If your current modifications do not conflict with the target branch, Git can simply carry them across.

bash
git status
git switch feature/search-page

This works when the files you edited can exist on the other branch without being overwritten. Git updates HEAD, updates the branch checkout, and leaves your working tree changes in place.

That is the simplest path, and it is often all you need.

When Git Refuses to Switch

Git blocks the switch when the target branch would overwrite local modifications. A typical error looks like "Your local changes to the following files would be overwritten by checkout."

That refusal is a safety feature. Git is telling you one of these things is true:

  • the target branch has different committed content in the same file
  • your untracked files would be replaced by tracked files on the other branch
  • the working tree cannot be transformed safely without losing local work

In that case, do not force random commands. Choose one of the controlled workflows below.

Safe Options When the Branches Conflict

1. Stash the Work Temporarily

If you want to switch branches and come back later, stash is the cleanest option:

bash
git stash push -u -m "WIP before switching to release branch"
git switch release/1.4

Then restore the changes when you are ready:

bash
git switch my-feature
git stash pop

Use -u if untracked files matter too.

2. Commit a Work-in-Progress Snapshot

If the changes are meaningful and you do not want them hidden in stash, make a temporary commit:

bash
git add .
git commit -m "WIP: partial refactor before context switch"
git switch release/1.4

Later you can clean up with an interactive rebase or a squash before sharing the branch.

3. Create a New Branch from Your Current State

If you realize the local changes belong on a different branch, do not move them around manually. Create the branch directly from your current working tree:

bash
git switch -c spike/cache-investigation

This is often the safest option because it records the intent immediately: these changes now belong to a new branch.

git switch Versus git checkout

Older tutorials use git checkout, but modern Git introduced git switch to separate branch switching from file restoration. The underlying safety rules are similar, but git switch is clearer:

  • 'git switch branch-name means "change branches"'
  • 'git restore file.txt means "restore file contents"'

That separation reduces mistakes, especially for newer users.

A Practical Decision Rule

Use this quick rule of thumb:

  • if the branches are compatible, git switch target-branch
  • if you need to pause unfinished work, stash
  • if the work is real and worth keeping, commit it
  • if the changes belong somewhere else entirely, create a new branch from the current state

The goal is not just to keep your edits alive. The goal is to keep history and intent understandable.

Common Pitfalls

  • Assuming Git can always carry local changes across branches. It only works when the working tree can be updated safely.
  • Forgetting untracked files. These can also block a branch switch if the target branch contains the same paths.
  • Using git checkout . or other destructive commands in a panic. That can discard work you meant to keep.
  • Leaving important work only in the stash for too long. Stash is useful, but commits and branches are easier to reason about.
  • Switching branches with a messy working tree and then forgetting which changes belong where.

Summary

  • Git can switch branches without discarding local changes when the target branch does not conflict with them.
  • If Git refuses, that is a safety check, not a failure.
  • Use stash for temporary parking, a commit for meaningful progress, or a new branch if the work belongs elsewhere.
  • Prefer git switch over git checkout for branch changes because the intent is clearer.
  • The safest workflow is the one that preserves both your code and your branch history.

Related reading
Free course
Beginner
7 lessons
2 hours
Tackling System Design Interview Problems

A short course that equips you with the skills to approach system design interviews methodically.

Start the free course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

All Rights Reserved.