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

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


当前回答

警告:

对已跟踪文件的本地更改将丢失 。 @ 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

其他回答

警告:

对已跟踪文件的本地更改将丢失 。 @ 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 fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname

因此,您可以避免所有不想要的副作用, 比如删除您想要保存的文件或目录, 等等 。

不要用git reset --hard这将抹去他们完全不可取的变化,相反:

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

您当然可以使用git fetch代替git pull因为它显然不会合并, 但如果你通常拉它, 继续拉在这里是有道理的。

所以这里发生的事情就是git pull 更新您的源/ 主管参考; git reset 更新本地分支引用与来源/主管相同,不更新任何文件,所以您的检查状态没有变化;git checkout 将文件返回到您的本地分支索引状态需要时。如果在现场和上游主控上添加了完全相同的文件,索引已经与重置之后的文件匹配,因此在普通情况下,不需要做git checkout完全没有

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

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

您可以在您的工程基准文件夹中以文件忽略该文件 :

. jutignore( )

public/images/*

然后拉动修改,然后从您的 gitignore 文件中删除该行 。

步骤1。 (可选择)
从本地主控件库的根根, 保存备份和空当前文件夹:

mkdir -p ../<branch>-bkp && mv --backup=t * ../<branch>-bkp

步骤2从远程仓库下载分支的所有文件和文件夹 :

git checkout <branch> && git add -A . && git reset --hard origin/<branch> && git pull

替换位置<branch>使用要覆盖的分支的名称。

评论:

  • 你可能更喜欢手动手动将当前文件和文件夹替换为步骤1.
    事实上,我建议建议建议建议建议在操作系统的 GUI 中与文件管理员一起这样做 。
  • 如果你跳过步骤1注意: 您将失去本地仓库的所有工作 !
  • 重要:如果你离开,git pull步骤2,
    您可能无法从远程仓库获取最新版本!
    根据下文的第二个参考,git reset --hard
    重置中继区和工作目录以匹配最近的承诺.
    我的经历与这个说法相矛盾!
  • 如果你逃跑git reset --hard origin/<branch_to_overwrite>不要先从本地主控库删除所有文件和文件夹, 请小心, 任何仍然埋在周围的垃圾文件都可能偷偷潜入远程仓库 。git push即使这不是你的本意
    额外git add -A .步骤2如果您选择退出, 防止发生这种情况步骤1.

参考文献:
https://gitforwindows.org/
https://www.atlassian.com/git/tutorials/undoing-changes/git-reset
https://www.atlassian.com/git/tutorials/rewriting-history/git-reflog