文件分阶段内容与HEAD不同

时间:2016-06-21 19:47:13

标签: git

当我尝试使用git rm --cached时,收到以下错误:

error: the following file has staged content different from both the file and the HEAD:

我知道我可以用git rm --cached -f <filename>来规避这个错误。但通常当我使用git rm --cached取消暂存文件时,我不会收到此错误。

我的问题是,该文件与HEAD有不同的暂存内容是什么意思。

4 个答案:

答案 0 :(得分:6)

通常情况下,您获得“#st; staged and modified&#34;”的项目的状态,即:它首先被修改,然后被暂存,然后再次被修改。

必须谨慎处理此状态,否则如果您现在运行提交会导致很多误解,因为只会提交暂存更改(是的,即使在同一文件上下文中,也只会提交暂存更改),未进行分阶段的更改将保留在非暂存区域以供将来提交(如果已暂存)。

答案 1 :(得分:1)

有三个地方(有变化)值得分辨:

  • 在文件
  • 您已接受的文件中的更改将成为下一次提交的一部分,因此称为暂存更改
  • 已提交的文件中的更改。

当您编辑和提交文件时,只有前两个问题。其中两个(非分段与分阶段)git status向您展示了您的变化类型。

答案 2 :(得分:0)

在您的终端中,运行:

  1. 首先提交您的更改。
  2. git rm --cached filename-to-untrack 那么应该忽略的将被忽略。(如果这是一个文件夹,则在 -r 后添加 rm

答案 3 :(得分:-1)

我有您的问题,以及“我该如何解决”的问题。我想不出用 SourceTree 修复它的方法。 (通常它比 GitHub 桌面提供更多选项。)

正如 Micha 和 Luis 所指出的,您问​​题的字面答案是您拥有该文件的三个版本,是的,必须小心处理,因为它们都不同。换句话说,是的,暂存文件与 HEAD 不同(任何暂存文件都是如此)。版本是:

  1. 源代码管理中的原始文件
  2. 暂存的文件比提交的要新
  3. 磁盘上的文件,甚至比提交的文件或源代码控制中的文件还要新

用例是,您暂存文件,然后在 IDE 中更改它,例如,然后返回删除提交以暂存实际更改的文件,并且出现此错误。

SourceTree 不允许我暂存新文件,也不会让我取消暂存文件,并给出此错误消息。由于我们有一些 CI/CD 管道设置,我不想提交文件;我想要最新的文件。

我的解决方法是使用 git CLI。一个简单的

git add offendingfile.js

成功了。为什么 SourceTree 做不到,我不确定。