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

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


当前回答

这是恢复变革的最佳做法:

  • git commit提交您预置的更改, 以便将其保存在reflog 格式的reflog(见下文)
  • git fetch获取最新的上游变化
  • git reset --hard origin/master硬重置源主分支

缩略reflog 格式的reflog 本地存储库中正在更新的记录分支和其他参考资料简简简简简简简reflog 格式的reflog更改的历史历史.

因此,这总是一个伟大的实践 承诺。 承诺被附在折叠件上, 以确保您永远有办法检索删除的代码 。

其他回答

步骤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

尽管最初提出这个问题,但顶尖的答案会给有类似问题的人造成问题,但不想失去本地文件。例如,见Al-Punk和CrizCraig的评论。

以下版本对临时事务组(临时事务组)进行本地变更(临时事务组)tmp检查原始分支(我假设master)和合并更新。您可以用stash,但我发现通常更容易使用分支/合并方法。

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

我们假设其它存储库origin master.

对我唯一有用的是:

git reset --hard HEAD~5

这会让你背了五次承诺,然后

git pull

我通过向上看才发现如何解除 Git 合并.

如果您正在制定您的代码, 发现新的更改是一个巨大的错误或意外, 您可以简单地使用其他选项, 比如 :

git restore .

。指目录中的所有文件。

首先,尝试标准的方式:

git reset HEAD --hard # To remove all not committed changes!
git clean -fd         # To remove all untracked (non-git) files and folders!

警告警告警告警告:上端命令只有在您没有指定数据/文件时才能导致数据/文件丢失!如果您不确定,请先将整个仓库文件夹的备份作为首选 。

然后再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次

如果上面没有帮助,你也不关心你的未追踪文件/目录(在万一情况下先备份),请尝试以下简单步骤:

cd your_git_repo  # where 'your_git_repo' is your git repository folder
rm -rfv *         # WARNING: only run inside your git repository!
git pull          # pull the sources again

这将重新移动所有 git 文件( 豁免).git/(dir,你们都承诺过的地方) 并再次拉动它。


为什么git reset HEAD --hard在某些情况下会失败吗?

  1. 自定义规则.gitattributes file

    拥有( 拥有)eol=lf. givatritites 中的规则可能导致 Git 将 CRLF 线条转换为某些文本文件中的 LF , 从而修改某些文件更改 。

    如果情况如此,你必须实施这些CRLLF/LF的改变(通过在git status),或尝试:git config core.autcrlf false暂时忽视他们。

  2. 文件系统不兼容

    当您使用不支持权限属性的文件系统时。 例如, 您有两个仓库, 一个在 Linux/ Mac (Linux/ Mac) 上 。ext3/hfs+和另一个基于FAT32/NTFS的文件系统。

    您注意到,有两种不同的文件系统, 所以不支持 Unix 权限的系统基本上不能在不支持这种权限的系统上重置文件权限, 所以不管如何--hard你试试看,GIT总能察觉到一些"变化"