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

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


当前回答

这将删除所有未承诺的更改, 然后拉动 :

git reset --hard HEAD
git pull

其他回答

似乎大多数答案都集中在master然而, 分支中, 有几次我在两个不同的地方 研究同一个功能分支, 我希望在一个分支中重设一个, 在另一个分支中反映出来, 而不是跳过很多圈子。

依据综合RNA 的答复Torrek对类似问题的答复我已经想出了一个非常成功的计划:

git fetch
git reset --hard @{u}

从一个分支运行它 它只会重新设置你的地方分支 到上游版本。

这可以恰当地用在别名中(git alits) (Git) 。git forcepull)以及:

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

或者,在你的.gitconfig文件 :

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

尽情享受吧!

警告:

对已跟踪文件的本地更改将丢失 。 @ info: whatsthis

任何本地文件吉特追踪到的不会受到影响。


第一,更新所有origin/<branch>最晚的 refs :

git fetch --all    # if this doesn't work try `git pull -f` (see comments)

备份当前分支( 例如 )master):

git branch backup-master

跳转到最新承诺origin/master并检出这些文件 :

git reset --hard origin/master

解释:

git fetch从远程下载最新数据,不试图合并或重标任何内容。

git reset将主分支重置为您刚获取的 。--hard选项选项 更改工作树中的全部文件以匹配文件origin/master.


维持当前当地承诺

[*]值得指出的是,通过从master在重设前:

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all    # if this doesn't work try `git pull -f` (see comments)
git reset --hard origin/master

在那之后,一切旧事,将永居其中;new-branch-to-save-current-commits.

未承付的更改

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

git stash

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

git stash pop

我认为,冲突有两种可能的原因,必须分别加以解决,而且据我所知,上述答案中没有一个涉及这两个问题:

  • 未跟踪的本地文件需要删除, 手动( 安全) 或按其他答案中的建议, 由git clean -f -d

  • 离子分支以外的当地承诺也需要删除。git reset --hard origin/master(取代“校长”的分支)git fetch origin(一)(一)

重置索引和头部origin/master,但不要重置工作树:

git reset origin/master

回报 :

谈到前几个答复中的拉/拉/拉/加,我想分享一个有趣的和有成果的把戏,

git pull --rebase

以上命令是我Git生命中最有用的命令 拯救了很多时间

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

查找详细信息"Git pull -rebase"是做什么的?.