Reset local repository branch to be just like remote repository HEAD
Categories:
Resetting Your Local Git Branch to Match the Remote HEAD

Learn how to forcefully reset your local Git branch to exactly mirror the state of its remote counterpart, discarding all local changes and commits.
In Git, it's common to find yourself in a situation where your local branch has diverged significantly from the remote, or you simply want to discard all local work and start fresh from the remote's latest state. This article will guide you through the process of resetting your local branch to precisely match the remote HEAD, effectively undoing all local commits and changes.
Understanding the 'Reset' Operation
The git reset
command is a powerful tool for undoing changes in your repository. When combined with git fetch
and git checkout
, it allows you to synchronize your local branch with the remote. It's crucial to understand that a hard reset (--hard
) will permanently delete local commits and uncommitted changes. Therefore, always ensure you have backed up any work you wish to preserve before proceeding.
flowchart TD A[Local Branch Diverged] --> B{Want to discard local changes?} B -- Yes --> C[Stash or backup local work] C --> D[Fetch latest remote state] D --> E[Reset local branch to remote HEAD] E --> F[Local branch matches remote] B -- No --> G[Consider `git rebase` or `git merge`] G --> F
Decision flow for resetting a local Git branch.
The Commands Explained
To achieve a full reset, we'll use a sequence of Git commands. Each command plays a specific role in ensuring your local branch is perfectly aligned with the remote's HEAD.
git fetch origin
# This command fetches the latest changes from the 'origin' remote but doesn't merge them into your local branches.
Step 1: Fetching remote changes
git reset --hard origin/your-branch-name
# This command forcefully resets your current local branch to match the 'your-branch-name' branch on the 'origin' remote.
# All local commits and uncommitted changes will be lost.
Step 2: Hard resetting to the remote branch
git clean -df
# This command removes untracked files and directories from your working directory.
# The '-d' flag removes untracked directories, and '-f' forces the operation.
Step 3: Cleaning untracked files and directories
git reset --hard
and git clean -df
commands are destructive. They will permanently delete local commits, uncommitted changes, and untracked files. Ensure you have backed up any important work before executing these commands.Step-by-Step Guide to Resetting Your Branch
Follow these steps carefully to reset your local branch to match the remote HEAD. Replace your-branch-name
with the actual name of the branch you are working on.
1. Step 1: Navigate to Your Repository
Open your terminal or command prompt and navigate to the root directory of your Git repository.
2. Step 2: Ensure You Are on the Correct Branch
Use git status
to confirm you are on the branch you intend to reset. If not, switch to it using git checkout your-branch-name
.
3. Step 3: Fetch Latest Remote Changes
Run git fetch origin
to download the latest changes from the remote repository without integrating them into your local branches. This updates your remote-tracking branches (e.g., origin/your-branch-name
).
4. Step 4: Perform the Hard Reset
Execute git reset --hard origin/your-branch-name
. This command will move your local branch pointer to the same commit as origin/your-branch-name
and discard all local changes in your working directory and staging area.
5. Step 5: Clean Untracked Files (Optional but Recommended)
To ensure your working directory is completely clean and matches the remote, run git clean -df
. This removes any files or directories that are not tracked by Git and were not part of the remote branch.
6. Step 6: Verify the Reset
Use git log
or git status
to confirm that your local branch now perfectly matches the remote's HEAD. Your local history should now be identical to the remote's.
git reset --soft origin/your-branch-name
instead of --hard
. This will move your HEAD but keep the changes staged.