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

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


当前回答

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

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

其他回答

奖金 :

说到先前的回答中的拉/拉/拉/加,我想分享一个有趣的和有成果的把戏,

git Pull -- rebase

以上命令是我生命中最有用的命令 节省了很多时间

在将您新承诺推进到服务器之前, 请尝试此命令, 它会自动同步最新的服务器更改( 加上一个抓取+合并) , 并将您的承诺放在 git 日志的顶部 。 无需担心手动拉动/ 合并 。

查找“ 直接拉动 - rebase ” 的操作细节 ? @ info: whatsthis

我也有同样的问题 没人给我这个解决方案 但对我有用

我用下列方法解决了问题:

删除所有文件。 仅留下. git 目录。 git 重置 -- hard head git pull git push

现在起作用了

警告: 任何未承诺的本地文件更改将会丢失。 任何本地文件若未使用 Git 进行追踪, 将不会受到影响 。 @ info: whatsthis


首先, 更新所有来源/ & lt; branch> refs 到最近的 :

git fetch --all

备份当前分支( 如母版) :

git branch backup-master

跳转到来源/ 管理员的最新承诺, 并检查这些文件 :

git reset --hard origin/master

解释:

git 从远程获取最新下载, 但不试图合并或重标任何内容 。

git 重置主控分支重置为您刚获取的文件。 -- hard 选项更改您工作树中的所有文件, 以匹配源/ 主机中的文件 。


维持当前当地承付额

[*]:值得指出的是,通过在重塑之前从主人那里设立一个分支,可以保持目前的当地承诺:

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

在此之后,所有旧承诺都将保留在新的部门到储蓄的当前承诺中。

未承诺的更改

将丢失未承诺的更改, 但是( 即使是阶段的) 。 请确保隐藏并承诺您需要的一切 。 因为您可以运行以下操作 :

git stash

然后重新应用这些未承诺的修改:

git stash pop

所需经费:

跟踪本地更改, 这样这里没有人会失去它们。 使本地存储库与远程源存储库匹配 。

解决方案 :

隐藏本地更改。 获取一个不看. gitignore 的文件和目录, 并硬重置到源头 。 git 隐藏 - 包含未跟踪的 git 抓取 - all git clean - fdx git 重置 - 硬源/ master

将索引和头重置为源/ 主机,但不重置工作树 :

git reset origin/master