git - 为什么在运行 git reset --hard HEAD 时出现“未跟踪文件”错误?
问题描述
运行后git reset hard --HARD
,我运行git pull
并收到以下错误:
User-MacBook-Air:appName User$ git reset --hard HEAD
HEAD is now at d32cc09 initial test
Users-MacBook-Air:appName User$ git pull
Updating d32cc09..35ece16
error: The following untracked working tree files would be overwritten by merge:
public/appName/js/password-change.js
Please move or remove them before you merge.
Aborting
不git reset hard --HARD
应该将我在分支中所做的一切重置为以前的方式吗?如果是这样,那么为什么Aborting
在尝试引入新代码时会出现这种情况?我认为它会触发自动进行更改,因为所有内容都已重置?
我能做些什么来克服这个问题?
解决方案
做什么正是 Git 告诉你的:要么 commit public/appName/js/password-change.js
,要么把它移开。
不
git reset --hard HEAD
应该将我在分支中所做的一切重置为以前的方式吗?
不完全是。或者更确切地说,正是这样,但这不是你想要和/或想要的。
Git 始终拥有每个跟踪文件的三个“活动”版本。当前提交中存在该文件的一个副本,当任何人提交时,它都会被冻结成它所具有的任何形式。在这里,它也被压缩并以仅 Git 的形式存储,以占用更少(可能更少)的空间。在 Git 调用的地方有第二个副本,不同的是index、staging area,或者有时是缓存,取决于 Git 的谁/哪个部分正在执行调用。索引副本也是仅 Git 的形式,但没有完全冻结——更像是泥泞的、随时可以冻结的。最后,第三个副本是您可以使用和查看的副本:工作树中的副本,它具有正常形式,因此您可以使用它/使用它。
git reset --hard
所做的是重新设置这三个文件中的每一个的所有三个副本,以便它们都与当前 ( ) 提交中的那个相匹配HEAD
。好吧,它可以做得更多,但在这种情况下,它就是这样做的。但这并没有解决重要的问题。
如果某些文件被跟踪,这意味着其他文件未被跟踪。这就是 Git 在这里抱怨的:一个未跟踪的文件。那么:这到底是什么意思?到底什么是跟踪文件?
被跟踪的文件是现在在索引中的文件。就是这样——真的就这么简单。您签出的提交中的文件从该提交进入索引,并且可能仍然存在。因此,提交中的文件位于索引和工作树中。使用git reset --hard
将重新设置索引和工作树副本。
相比之下,未跟踪文件是不在索引中的文件。(它必须在你的工作树中,否则它根本不存在。如果它在提交中,git reset --hard
将把它带回索引和工作树。)
无论如何,如果它现在不在索引中,那么要么你将它从索引中删除,要么它从一开始就不存在。后者往往更常见,因为通常您使用从索引中删除文件,这会将其从索引和工作树中删除。而且,我们可以确定它不在您的提交中,因为如果是,会将其带回您的索引中(并用提交的副本覆盖工作树副本)。git rm file
HEAD
git reset --hard
所以你有一个文件,你或某人或某事在工作树中创建,肯定不在索引中,也不在当前提交中。现在,通过运行git pull
,你告诉 Git 运行git merge
。(注意这git pull
意味着运行,然后运行git fetch
git merge
第二git merge
个Git 命令,通常是相似之处。)
合并必须将您当前的工作(无论是什么)与其他人的工作合并,无论其他人是谁。为此,Git 必须找出他们做了什么,并将其与您所做的结合起来。虽然我们无法从您发布的内容中确切地看到他们做了什么,但他们所做的包括添加一个新文件。
他们添加的新文件是您未跟踪的文件。 也就是说,你有:
public/appName/js/password-change.js
这是未跟踪的 - 不在您的索引中。 他们委托该文件的一个版本。Git 没有此文件版本的冻结副本以确保其安全。使用git merge
只会用他们的副本覆盖您的副本。public/appName/js/password-change.js
所以git merge
告诉你这个文件有问题:你应该提交它,这样你就有一个冻结的副本来保证它的安全,或者把它移开,这样就git merge
可以将他们的副本写入到位。
推荐阅读
- java - 将文件导入 intellij 时缺少项目结构
- python - 如何返回熊猫数据框中每个项目的每个值的频率?
- python - `shutil.rmtree` 不适用于 `tempfile.TemporaryDirectory()`
- reactjs - 是否可以渲染组件数组?
- excel - 如何在 VBA 中打印完整的用户表单
- html - 在 C Web 服务器中返回 404error.html 页面
- javascript - 有关阵列单击的更多信息,默认情况下在阵列上显示选项 1
- java - Apache POI 单元格值未出现
- matlab - 访问多个元素并为每个选定的元素分配不同的值
- html - 内容仍附加在一列的左边缘(响应式)