How do I force "git pull" to overwrite local files?

How do I force an overwrite of local files on a git pull ?

The scenario is 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.
  • The errors I'm getting are:

    error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge.

    How do I force Git to overwrite them? The person is a designer - usually I resolve all the conflicts by hand, so the server has the most recent version that they just needs to update on their computer.


    Important: 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 (eg uploaded user content), these files will not be affected.


    I think this is the right way:

    git fetch --all
    

    Then, you have two options:

    git reset --hard origin/master
    

    OR If you are on some other branch:

    git reset --hard origin/<branch_name>
    

    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


    [*]: 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
    

    After this, all of the old commits will be kept in new-branch-to-save-current-commits . Uncommitted changes however (even staged), will be lost. Make sure to stash and commit anything you need.


    Try this:

    git reset --hard HEAD
    git pull
    

    It should do what you want.


    WARNING: git clean deletes all your untracked files/directories and can't be undone.


    Sometimes just clean -f does not help. In case you have untracked DIRECTORIES, -d option also needed:

    git reset --hard HEAD
    git clean -f -d
    git pull
    

    WARNING: git clean deletes all your untracked files/directories and can't be undone.

    链接地址: http://www.djcxy.com/p/23548.html

    上一篇: 詹金斯的版本被封锁“选项代码:65002”

    下一篇: 我如何强制“git pull”覆盖本地文件?