【问题标题】:git - revert update-index/ignored file so I can change branch?git - 恢复更新索引/忽略的文件,以便我可以更改分支?
【发布时间】:2016-01-18 03:33:14
【问题描述】:

我试图将错误日志添加到我的 .gitignore 文件中,并且在某处读取到在将文件添加到 .gitignore 后我必须专门取消跟踪该文件。不知何故,我最终使用它来这样做:

git update-index --assume-unchanged Logs/Err.log

一切看起来都很好,直到我切换到我的开发分支进行合并。我不能改变分支。我收到以下错误:

您对以下文件的本地更改将被结帐覆盖:Logs/Err.log

然而,当我从当前分支运行 git status --s 时,我得到“没有可提交的内容,工作目录干净”

我在某个地方搞砸了。我怎样才能“实际上”忽略该错误日志?如何恢复到以前的非更新索引命令?

【问题讨论】:

标签: git gitignore git-index


【解决方案1】:

根据我自己的经验,执行git update-index --assume-unchanged 仅适用于执行它的分支。它并没有真正改变底层索引的样子,它只是掩盖了发生在该分支上的操作。所以当你切换分支时,Git 仍然“看到”脏文件。如果要切换分支,可以尝试以下方法:

git stash

git reset --hard HEAD

当然,你应该先撤消update-index

git update-index --no-assume-unchanged Logs/Err.log

【讨论】:

  • 嗯,--no-assume-unchanged...我想知道这与--add有什么不同...我将使用 RTFM(我一开始就应该这样做...)
  • 你在回答中的所作所为对我来说就像是一种黑客行为。一般来说,如果您需要更改分支并且您的工作目录很脏,您应该存储、提交或重置。
  • 这使我们两个人(当你发布你的答案时我正在研究它,否则我会按照你建议的方式完成它)。在任何情况下,分支都会正确合并到 dev 中,现在由于不再需要它而被删除。希望以后没有隐藏的问题......
  • 但它说我的工作目录是干净的...... git status 不应该让我看到任何脏东西吗?
  • 您错过了我的回答(和文档)的重点。当您转到git update-index --assume-unchanged 时,Git 会在文件上放置一个掩码,以便它不会出现在 该分支上的索引 中。但是,该文件确实仍然存在于索引中,当您尝试更改分支时,瞧,掩码应该会脱落。
【解决方案2】:

我不确定这是“正确”的答案,但这是我解决它的方法(这只是一个几乎不重要的错误日志,这很有帮助......)

  1. 从 .gitignore 中删除了文件
  2. 删除文件
  3. 运行git update-index --add Logs/Err.log
  4. 提交分支
  5. 结帐以开发和合并
  6. 返回上一个功能分支

看起来不错。我现在可以添加 Err.log,它会接收更改,因此分支会再次跟踪它。我将删除该文件,然后再次添加到 .gitignore,一切应该都很好。

道德:

  1. 当您不完全了解它们的作用时,不要乱搞 (update-index)
  2. 不要试图忽略已被跟踪的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2011-03-18
    • 2011-03-20
    • 2010-11-22
    • 2020-05-22
    • 2015-11-06
    相关资源
    最近更新 更多