⚠ Warning:
Any uncommitted local change to tracked files will be lost, even if staged.
But any local file that's not tracked by Git will not be affected.
First, update all origin/<branch> refs to latest:
git fetch --all
Backup your current branch (e.g. main):
git branch backup-main
Jump to the latest commit on origin/main and checkout those files:
git reset --hard origin/main
Explanation:
git fetch downloads the latest from remote without trying to merge or rebase anything.
git reset resets the master branch to what you just fetched. The --hard option changes all the files in your working tree to match the files in origin/main.
Maintain current local commits
[*]: It's worth noting that it is possible to maintain current local commits by creating a branch from main before resetting:
git checkout main
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/main
After this, all of the old commits will be kept in new-branch-to-save-current-commits.
Uncommitted changes
Uncommitted changes, even if staged (with git add), will be lost. Make sure to stash or commit anything you need. For example, run the following:
git stash
And later (after git reset), reapply these uncommitted changes:
git stash pop
Answer from RNA on Stack OverflowWhich may create merge conflicts.
⚠ Warning:
Any uncommitted local change to tracked files will be lost, even if staged.
But any local file that's not tracked by Git will not be affected.
First, update all origin/<branch> refs to latest:
git fetch --all
Backup your current branch (e.g. main):
git branch backup-main
Jump to the latest commit on origin/main and checkout those files:
git reset --hard origin/main
Explanation:
git fetch downloads the latest from remote without trying to merge or rebase anything.
git reset resets the master branch to what you just fetched. The --hard option changes all the files in your working tree to match the files in origin/main.
Maintain current local commits
[*]: It's worth noting that it is possible to maintain current local commits by creating a branch from main before resetting:
git checkout main
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/main
After this, all of the old commits will be kept in new-branch-to-save-current-commits.
Uncommitted changes
Uncommitted changes, even if staged (with git add), will be lost. Make sure to stash or commit anything you need. For example, run the following:
git stash
And later (after git reset), reapply these uncommitted changes:
git stash pop
Which may create merge conflicts.
This will remove all uncommitted changes, even if staged,
and then pull:
git reset --hard HEAD
git pull
But any local file that's not tracked by Git will not be affected.
Does git pull not overwrite local code always?
How to overwrite local changes from remote repository?
How do you prevent a local file from being overwritten by a more recent remote file?
Pycharm + GitHub: can't push, pull or merge - made changes in both places
How do I force git pull to overwrite local files?
I used git stash but now I'm getting merge conflicts. Help!
How do I undo a git reset --hard?
Basically I want to clone a repository, regardless of whether that repository exists locally or not. If there is a local version I want it overwritten. I don't to synchronise any local changes to the master repo, I want a one directional flow of information from the remote repository to the local one. Seems like it should be straightforward, but I can't find an easy way to do this. My solution is to delete the folder and re-clone it every time I want to update it, but that seems wrong. Is there a command for this? something like git clone -force repositorylink
Our team has a project repo setup and all of us devs have forked that repo and cloned it to our local machines. So all of us have origin and root configured respectively where root is the actual repo and origin is our individual forks.
We always take a pull from root before pushing to origin and raising a merge request. The good practice.
Now I had some task on which I had to work on which will take me 2 days to complete. Before starting to work on it, I took a pull from root and started coding. After 2 days as I finished, before pushing to my origin, I took a pull from root because I saw other devs had some commits of their own and I will resolve the merge conflicts (if any) on my local before raising my own merge request. However , I did not commit my local changes, just saved them.
But git pull was successful and it did not prompt me to commit local changes else it'll be lost in the pull operation. So i checked those other commits and I saw none of them pertained to the files I changed, but were to different files. So i committed my changes, pushed to origin, the usual steps.
So will git pull not overwrite changes in my uncommitted local when the same file has not been modified in root? Technically git tracks these changes and must be unsure what to do as I haven't committed them. Either I should stash or commit? What am I missing or lacking the understanding of?