我如何强制在 git pull 上覆盖本地文件 ? 我的本地仓库包含一个与服务器相同的文件名文件 。

错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖


当前回答

在窗口上执行此单命令 :

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

其他回答

对我唯一有用的是:

git reset --hard HEAD~5

这会使你们再返于五次,然后是五次,

git pull

我通过查查如何解除Git合并发现这一点。

最顶尖的答案会给有类似问题的人带来问题, 但不想失去本地文件。 例如,

以下版本将您本地的更改引入临时分支( tmp) , 检查原始分支( 我假设是母分支) 并合并更新 。 您可以用隐藏来做到这一点, 但我发现通常更容易使用分支/ 合并方法 。

git checkout -b tmp
git add *; git commit -am "my temporary files"
git checkout master

git fetch origin master
git merge -s recursive -X theirs origin master

假设另一个仓库是源主

所有这些解决方案的问题在于,它们要么过于复杂,要么是一个更大的问题,就是它们从网络服务器上移除了所有未跟踪的文件,我们并不想这样做,因为服务器上总是有需要的配置文件,而不是Git仓库。

这是我们使用的最干净的解决方法:

# Fetch the newest code
git fetch

# Delete all files which are being added, so there
# are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
    rm -f -- "$file"
done

# Checkout all files which were locally modified
for file in `git diff --name-status | awk '/^[CDMRTUX]/ {print $2}'`
do
    git checkout -- "$file"
done

# Finally pull all the changes
# (you could merge as well e.g. 'merge origin/master')
git pull

第一个命令获取最新数据。 如果在存储库中添加了任何文件, 第二次命令检查会从本地存储库中删除那些会引发冲突的未跟踪文件。 第三次命令检查了所有本地修改过的文件。 最后, 我们尝试将更新更新到最新版本, 但这次没有冲突, 因为重写中未跟踪的文件已经不存在, 所有本地修改过的文件已经不存在了 。

警告,如果您在 gitignore 文件中有任何目录/ * 条目, 这样做将会永久删除您的文件 。

@lauri在 @lauri 遭遇时, 听从David avsajanishvili的建议,

而不是 (git> v1.7.6):

git stash --include-untracked
git pull

稍后您可以清理藏匿历史。

手动,一个一个一个:

$ git stash list
stash@{0}: WIP on <branch>: ...
stash@{1}: WIP on <branch>: ...

$ git stash drop stash@{0}
$ git stash drop stash@{1}

残忍地, 一次一次地:

$ git stash clear

当然,如果你想回到你藏的东西:

$ git stash list
...
$ git stash apply stash@{5}

不要使用 git 重置 -- hard. 来擦除他们可能完全不可取的更改。 相反 :

git pull
git reset origin/master
git checkout <file1> <file2> ...

当然,你可以使用Git抓取而不是Git拉动, 因为显然它不会合并, 但如果你通常拉动它, 继续拉动这里是有道理的。

所以这里发生的情况是 git put 更新您的源/ 主管参考文件; git 重置更新您本地的分支引用与源/ 主管的引用相同, 无需更新任何文件, 所以您的检查状态没有变化; 然后按需要, git 检查退出将文件返回到您本地的分支索引状态 。 如果在现场和上游主控中添加了完全相同的文件, 索引已经符合重置之后的文件, 因此在常见情况下, 您不需要在

如果上游分支也包含您想要自动应用的承诺,您可以在进程上跟随细微的变异:

git pull
git merge <commit before problem commit>
git reset <problem commit>
git checkout <file1> <file2> ...
git pull