如何将未暂存的文件移动到未跟踪的位置?

Posted

技术标签:

【中文标题】如何将未暂存的文件移动到未跟踪的位置?【英文标题】:How do I move an unstaged file to untracked? 【发布时间】:2015-09-02 21:13:03 【问题描述】:

说这是我在 git status 中查看的内容:

Changes not staged for commit:
    modified:   Makefile.in

Untracked files:
   ../node_modules/somepath/inverter_packet.js

我想要做的是将 Makefile.in 从“未暂存以进行提交的更改”移动到“未跟踪的文件”。

我知道我可以使用git update-index --assume-unchanged Makefile.in 忽略更改,并使用--no-assume-unchanged 命令将它们取回,但我不想让这些文件完全看不到,因为我确实编辑/提交它们一次一会儿。

我想从“未暂存”部分中删除文件,但当我输入 git status 时仍然可以看到它。

或者,如果我可以(最好是简单地)在输入 git diff 时停止显示未暂存文件的差异(例如我的 Makefile.in 在那里),那也很好。

【问题讨论】:

未跟踪文件是指完全不受 git 版本控制的文件。所以我想使更改最终出现在“未跟踪文件”部分的唯一方法是停止跟踪它们。 git rm --cached -- <file>git commit。但是,由于您声明偶尔会提交文件,我假设这不是您想要做的。 运行git rm --cached <path>,其中<path> 代表相关文件的路径。 【参考方案1】:

我想从“未暂存”部分中删除文件,但当我输入 git status 时仍然可以看到它。

您希望它们移动到哪里?真的没有其他地方可以躲了。

正如您所提到的,这些是跟踪文件,因此您不想使用 git rm 从存储库中删除它们,这是完全错误的。这里唯一真正的选择是让它们保持不变。无论哪种方式,它们都会“不在视野范围内”,所以这个问题没有多大意义。

另一种选择是使用git stash -p 仅存储单个文件,但随后您将丢失工作副本中的更改,直到您将存储弹出回,这又不是您想要的。

【讨论】:

首先,感谢您的回复。从存储的角度来看,我不希望它们真正“移动”到任何地方。我只想将它们重新归类为“未跟踪”。但如果这不能通过标准的 git 命令数组轻松实现,我将不得不尝试其他方法。【参考方案2】:

我也遇到过类似的情况。这是我遵循的将 unstaged 改为 untracking 的方法。

    git rm [文件名和路径] --cached

现在对应的文件被删除了。它使用 --cached 选项将文件保存在 localhost 中

    git commit(被删除的文件)。

再次构建您的项目。如果始终生成文件,您将获得未跟踪的文件。 现在将其添加到 .git/info/exclude 中。

    git 状态

您现在正在取消跟踪最初未暂存的文件。

注意:如果文件不是在构建过程中生成的,您将无法取消跟踪它们。我的意思是它们完全从 git 跟踪中删除。

【讨论】:

以上是关于如何将未暂存的文件移动到未跟踪的位置?的主要内容,如果未能解决你的问题,请参考以下文章

本地分支在没有明显原因的情况下显示未暂存的更改和未跟踪的文件[重复]

如何快速撤消 git 中的暂存和未暂存的更改?

如何使用 Visual Studio Tools for Git 将跟踪的文件移动到未跟踪的位置

git常用操作合集

Git stash uncached:如何存放所有未暂存的更改?

Git-- 记录每次更新到仓库(git clonestatusadddiffcommitrmmv命令详解)