【问题标题】:How do I remove a file from local git repository and local file system but not from remote repository?如何从本地 git 存储库和本地文件系统中删除文件,而不是从远程存储库中删除文件?
【发布时间】:2020-10-31 01:19:39
【问题描述】:

我一直试图从我的本地文件系统和本地 git 存储库中删除一个文件。

我正在使用git rm --cached <file name>

但每当我使用另一个文件并推送更改时,git 也会从我的远程存储库中删除本地删除的文件。我希望文件保留在我的 GitHub 上。

非常感谢您的帮助。

【问题讨论】:

  • 你能解释一下这个文件的作用吗?自述文件?配置文件?
  • 这是一个 C++ 文件。
  • 可以直接删除本地文件。但是当推送到远程时,不要为该文件执行git add。这行得通吗?
  • 你能解释一下为什么你想在你的远程有一个文件,而不是在你的本地吗?根本问题可能还有其他解决方案,而不是您要求的解决方案。

标签: git github git-commit git-remote


【解决方案1】:
git update-index --skip-worktree <file name>

这有点 hacky,但它允许您编辑(或删除)文件而不显示已更改。

您可以稍后在需要时轻松恢复:

git update-index --no-skip-worktree <file name>

Git Docs:

--[no-]skip-worktree

当指定这些标志之一时,为路径记录的对象名称不会更新。相反,这些选项设置和取消设置路径的“skip-worktree”位。

SKIP-WORKTREE BIT

Skip-worktree 位可以用一句话(长)来定义:当读取一个条目时,如果它被标记为 skip-worktree,那么 Git 会假装它的工作目录版本是最新的,而是读取索引版本。

【讨论】:

    【解决方案2】:

    如果您的本地设置需要一个特定版本,而远程设置需要一个不同的版本,单独使用 git:您可以创建两个分支。

    另一种可能性是使用语言特性来避免包含部分代码。

    对于 C++ 文件,这可能是文件中的 #ifdef(或 #ifndef)部分,以及您将在本地计算机上使用以排除文件内容的编译选项。

    【讨论】:

      【解决方案3】:

      当您在本地删除文件并通过运行更新索引(暂存区)时 git rm --cached &lt;file name&gt;,删除已上演。

      如果您在运行git rm --cached &lt;file name&gt; 之后运行git status,您将看到删除已为下一次提交准备好。现在,如果您对其他文件进行更改并添加这些文件以进行提交,删除仍然是暂存的。当您最终提交并推送更改时,删除也在远程完成。

      但是,如果您仍然想完成这项工作,不要暂缓删除

      不要运行git rm --cached &lt;file name&gt;。只需手动删除文件。这将完成这项工作。但是,当您运行 git status 时,它总是会列在未暂存的更改中,如下图所示。

      【讨论】:

        猜你喜欢
        • 2016-07-03
        • 2011-12-25
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 2021-06-15
        • 2012-08-31
        相关资源
        最近更新 更多