DEV Community

loading...
Cover image for How do I force git pull to overwrite local files ?

How do I force git pull to overwrite local files ?

courseprobe profile image Course Probe ・3 min read

Git might be confusing for new users, if this is one of the first times you are tasked to do some pulls from Github or even Gitlab, then we are going to explore some scenarios and possible ways of getting Git to overwrite some local files.

The scenario is the following:

  • A team member is modifying the templates for a website we are working on

  • They are adding some images to the images directory (but forgets to add them under source control)

  • They are sending the images by mail, later, to me

  • I’m adding the images under the source control and pushing them to GitHub together with other changes

  • They cannot pull updates from GitHub because Git doesn’t want to overwrite their files.

Now consider that, If you have any local changes, they will be lost. With or without --hard option, any local commits that haven't been pushed will be lost.

If you have any files that are not tracked by Git (e.g. uploaded user content), these files will not be affected.

First, run a fetch to update all origin/ refs to latest:

git fetch --all
Enter fullscreen mode Exit fullscreen mode

Backup your current branch:

git checkout -b backup-master
Enter fullscreen mode Exit fullscreen mode

Then, you have two options:

git reset --hard origin/master
Enter fullscreen mode Exit fullscreen mode

OR If you are on some other branch:

git reset --hard origin/<branch_name>
Enter fullscreen mode Exit fullscreen mode

Explanation:

git fetch downloads the latest from remote without trying to merge or rebase anything.

Then the 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/master

Maintain current local commits

[*]: It’s worth noting that it is possible to maintain current local commits by creating a branch from master before resetting:

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master
Enter fullscreen mode Exit fullscreen mode

After this, all of the old commits will be kept in new-branch-to-save-current-commits.

Uncommitted changes

Uncommitted changes, however (even staged), will be lost. Make sure to stash and commit anything you need. For that you can run the following:

git stash
Enter fullscreen mode Exit fullscreen mode

And then to reapply these uncommitted changes:

git stash pop
Enter fullscreen mode Exit fullscreen mode

source: https://stackoverflow.com/questions/1125968/how-do-i-force-git-pull-to-overwrite-local-files

Resources about Git you might be interested:

Get this Free eBook: Pro Git PDF Book


Other Dev posts:

Discussion (0)

pic
Editor guide