How to `git pull` while ignoring local changes?

GitGit Pull

Git Problem Overview


Is there a way to do a git pull that ignores any local file changes without blowing the directory away and having to perform a git clone?

Git Solutions


Solution 1 - Git

If you mean you want the pull to overwrite local changes, doing the merge as if the working tree were clean, well, clean the working tree:

git reset --hard
git pull

If there are untracked local files you could use git clean to remove them.

  • git clean -f to remove untracked files
  • -df to remove untracked files and directories
  • -xdf to remove untracked or ignored files or directories

If on the other hand you want to keep the local modifications somehow, you'd use stash to hide them away before pulling, then reapply them afterwards:

git stash
git pull
git stash pop

I don't think it makes any sense to literally ignore the changes, though - half of pull is merge, and it needs to merge the committed versions of content with the versions it fetched.

Solution 2 - Git

For me the following worked:

(1) First fetch all changes:

$ git fetch --all

(2) Then reset the master:

$ git reset --hard origin/master

Note - For users of github, "master" was replaced with "main" in October 2020. For projects created since then you may need to use "main" instead, like:

$ git reset --hard origin/main

(3) Pull/update:

$ git pull

Solution 3 - Git

You just want a command which gives exactly the same result as rm -rf local_repo && git clone remote_url, right? I also want this feature. I wonder why git does not provide such a command (such as git reclone or git sync), neither does svn provide such a command (such as svn recheckout or svn sync).

Try the following command:

git reset --hard origin/master
git clean -fxd
git pull

Solution 4 - Git

The command bellow wont work always. If you do just:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

and so on...

To really start over, downloading thebranch and overwriting all your local changes, just do:


$ git checkout thebranch
$ git reset --hard origin/thebranch

This will work just fine.

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'

Solution 5 - Git

shortest way to do it is:

git pull --rebase --autostash

Solution 6 - Git

git fetch --all && git reset --hard origin/master

Solution 7 - Git

this worked for me

git fetch --all
git reset --hard origin/master
git pull origin master

with the accepted answer I get conflict errors

Solution 8 - Git

Look at git stash to put all of your local changes into a "stash file" and revert to the last commit. At that point, you can apply your stashed changes, or discard them.

Solution 9 - Git

If you are on Linux:

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

The for loop will delete all tracked files which are changed in the local repo, so git pull will work without any problems.
The nicest thing about this is that only the tracked files will be overwritten by the files in the repo, all other files will be left untouched.

Solution 10 - Git

I usually do:

git checkout .
git pull

In the project's root folder.

Solution 11 - Git

This will fetch the current branch and attempt to do a fast forward to master:

git fetch && git merge --ff-only origin/master

Solution 12 - Git

It's late but someone can find this useful.(Worked for me)

  1. git restore < fileName> or git restore .
  2. git pull

Solution 13 - Git

.gitignore

"Adding unwanted files to .gitignore works as long as you have not initially committed them to any branch. "

Also you can run:

git update-index --assume-unchanged filename

https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html

Solution 14 - Git

Also, it's possible to keep changes from local commits and push them as a new commit. I use these steps when I have a mess in my local commits.

  1. git reset --soft origin/main
  2. git stash
  3. git pull --rebase
  4. git stash pop

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmarkdorisonView Question on Stackoverflow
Solution 1 - GitCascabelView Answer on Stackoverflow
Solution 2 - GitArtur BarseghyanView Answer on Stackoverflow
Solution 3 - GitVictorView Answer on Stackoverflow
Solution 4 - GitDrBecoView Answer on Stackoverflow
Solution 5 - GitgilView Answer on Stackoverflow
Solution 6 - GitLuca C.View Answer on Stackoverflow
Solution 7 - GitPablo PazosView Answer on Stackoverflow
Solution 8 - GitSeth JohnsonView Answer on Stackoverflow
Solution 9 - GitStrahinja KustudicView Answer on Stackoverflow
Solution 10 - GitCassiano FrancoView Answer on Stackoverflow
Solution 11 - GitPetahView Answer on Stackoverflow
Solution 12 - GitAkshay PatilView Answer on Stackoverflow
Solution 13 - GitLeo BravoView Answer on Stackoverflow
Solution 14 - GitSergiu SavvaView Answer on Stackoverflow