Skip to main content
๐Ÿ›ก๏ธ Verified Technical Content: Written by Serhii Hrekov. | Last reviewed & updated in Git: July 21, 2026

Git Branch Operations: Checkout Files, Replace Branches, Rebase Syntax, and Deletion

ยท 9 min read
Serhii Hrekov
Senior Software Engineer & System Architect specializing in Python, Web Systems, Cloud Infrastructure & Automation

Sometimes, you may want to retrieve a specific file from another branch in a Git repository without switching branches completely. This is particularly useful when you want to grab a specific version of a file for debugging, rollback, or review.

In this guide, we'll walk through how to checkout a single file from another branch using Git. We'll cover multiple scenarios with examples and best practices.


Why This is Usefulโ€‹

  • Revert or test a previous version of a file
  • Compare changes between branches
  • Avoid conflicts from switching the full branch
  • Maintain working directory without resets

1. Basic Git Checkout Syntaxโ€‹

The simplest way to checkout a file from another branch is:

git checkout <branch-name> -- <path-to-file>

Exampleโ€‹

Let's say you want to get README.md from the develop branch while on main:

git checkout develop -- README.md

This will replace the current README.md in your working directory with the version from develop.


2. Checkout a File to a Different Nameโ€‹

You can also checkout the file from another branch and save it under a different name:

git show develop:README.md > README.develop.md

This is useful if you want to compare two versions side-by-side.


3. Checking Out a File in a Subdirectoryโ€‹

git checkout feature-x -- src/utils/helpers.py

Make sure you provide the relative path from the root of the repo.


4. Listing Files in Another Branchโ€‹

If you're unsure what the exact path of the file is in the other branch:

git ls-tree -r <branch-name> --name-only

Exampleโ€‹

git ls-tree -r develop --name-only | grep requirements.txt

5. Restore File from Another Branch (Git 2.23+)โ€‹

Starting with Git 2.23, you can also use git restore:

git restore --source <branch-name> <path-to-file>

Exampleโ€‹

git restore --source develop README.md

This is the modern equivalent of git checkout and more descriptive.


6. Caution: This Overwrites the Fileโ€‹

Be aware that both git checkout and git restore will overwrite your current file.

If you want to keep your local changes, stash them first:

git stash push -m "before file restore"
git checkout <branch> -- <file>
git stash pop

7. Compare File Differences (Optional)โ€‹

To view the differences without checking out the file:

git diff <branch-name> -- <file>

This shows the changes between your current working file and the one in another branch.


Summary Tableโ€‹

TaskCommand Example
Checkout a file from another branchgit checkout develop -- myfile.py
Save file under different namegit show develop:myfile.py > myfile-dev.py
Use restore instead of checkoutgit restore --source develop myfile.py
See diff between branchesgit diff develop -- myfile.py
List files in a branchgit ls-tree -r develop --name-only

Further Readingโ€‹


How to Replace One Git Branch with Anotherโ€‹

Replacing one Git branch with another is a destructive operation that rewrites the target branch history. The git merge -s ours method is a safe way to achieve this.

The Solution: Using the ours Merge Strategyโ€‹

The ours merge strategy resolves every conflict by favoring "our" version. By merging main into feature-alpha with the ours strategy, you create a commit with the same content as feature-alpha but with both parents, creating a bridge that allows you to overwrite main.

# 1. Prepare the main branch
git checkout main
git pull

# 2. Create bridge with ours strategy
git checkout feature-alpha
git merge -s ours main

# 3. Fast-forward the main branch
git checkout main
git merge feature-alpha

# 4. Push (force required)
git push --force origin main

Alternative (Hard Reset): git push --force origin feature-alpha:main - shorter but riskier.


Understanding git rebase origin/branch vs git rebase origin branchโ€‹

The difference between a slash and a space in Git rebase commands is the difference between a simple update and a complete context switch.

Single Argument: git rebase origin/branchโ€‹

Replays your current branch commits on top of the remote-tracking branch snapshot.

Double Argument: git rebase origin branchโ€‹

Git treats these as two separate arguments: git rebase <upstream> <working-branch>. Git first checks out <working-branch>, then rebases it onto <upstream>. Since origin is a remote name (not a branch), this usually throws fatal: invalid upstream 'origin'.

CommandArgumentsResult
git rebase origin/mainOneRebases current branch onto remote snapshot.
git rebase origin mainTwoError - origin is not a valid starting point.
git rebase main featureTwoSwitches to feature, rebases it onto main.

Pro Tip: Always run git fetch before git rebase origin/branch to ensure you have the latest remote snapshot.


How to Delete Local and Remote Branches in Gitโ€‹

Deleting a branch requires a two-step operation: local cleanup and remote cleanup.

# 1. Switch to a safe branch
git checkout main

# 2. Delete locally (-d for merged, -D to force)
git branch -d feature-old-stuff

# 3. Delete on the remote server
git push origin --delete feature-old-stuff

# 4. Prune stale references
git fetch --prune
TaskCommandWhen to use
Delete Merged Localgit branch -d <name>Daily housekeeping.
Force Delete Localgit branch -D <name>Discard work entirely.
Delete Remotegit push <remote> -d <name>PR is merged and done.
Prune Stale Linksgit fetch -pgit branch -a shows ghost branches.

Recovery: If you accidentally deleted a local branch, find the lost commit with git reflog and revive it with git checkout -b <branch_name> <commit_hash>.


Additional Sourcesโ€‹