1. Fetch the Latest Changes from Remote
First, you should fetch all branches and their respective commits from the remote repository. This command doesn't change your working directory. It just updates your local repository's knowledge of the remote branches.
git fetch --all
2. Reset Your Current Branch to Match a Remote Branch
If you want to reset your current branch (for example, main
) to exactly match the remote branch (let's say the remote is called origin
), use the following command:
git reset --hard origin/main
This will reset your current branch's history to match the remote branch main
and it will also reset your working directory to match the remote. Any local changes to tracked files in your working directory will be lost.
3. Clean Your Working Directory
If you want to make sure there are no leftover untracked files or directories in your working directory, you can use:
git clean -fdx
-f
stands for "force" and tells git clean
to remove untracked files.-d
means also remove untracked directories.-x
means also remove the files ignored by git, like those mentioned in .gitignore
.
4. Update All Local Branches (Optional)
If you have multiple branches and you want all your local branches to match the remote branches, you can check out each branch and repeat the reset command:
git checkout <branch-name>
git reset --hard origin/<branch-name>
Replace <branch-name>
with the name of the branch you want to reset.
5. Prune Deleted Remote Branches
Sometimes, branches are deleted from the remote but they still exist in your local copy. To remove these stale branches from your local repository, you can use:
git fetch --prune
or
git remote prune origin
These commands remove any remote-tracking references that no longer exist on the remote.
Important Notes
- Backup Your Work: Before performing these actions, especially
git reset --hard
and git clean -fdx
, ensure you have backups of your work. These commands can permanently delete uncommitted changes and untracked files. - Communicate with Your Team: If you're working in a team, make sure to communicate these actions especially if branches are being reset, as it could affect their local environments as well.