【问题标题】:Why use 'git rm' to remove a file instead of 'rm'?为什么使用 'git rm' 而不是 'rm' 来删除文件?
【发布时间】:2011-09-15 16:43:02
【问题描述】:

在 SVN 上,直接从文件系统中删除某些内容(而不是使用 svn)会让人头疼。

我在使用git 时没有发现这是一个问题,但我注意到 git 有它自己的 rm 实现 (git rm)。

rmgit rm 有什么区别?

【问题讨论】:

    标签: git


    【解决方案1】:

    如果您只使用rm,则需要使用git add <fileRemoved> 跟进。 git rm 一步完成。

    您也可以使用 git rm --cached 从索引中删除文件(暂存它以在下次提交时删除),但将您的副本保留在本地文件系统中。

    【讨论】:

    • 好答案。我能够使用git reset --hard,然后对 master 进行检查以摆脱分离的头部状态,因为我知道我没有任何未提交的更改。如果你还没有提交你的更改,你可能想要做一个 git stash,但我对 git 比较陌生,所以我不知道确切的命令。如果您在 2014 年或之后来到这里,希望这个答案对您有用。
    • @Andy - 如果我使用rm(而不是git rm)并使用它删除了许多文件,现在不希望git 跟踪这些文件。有没有办法恢复更改?我希望git 将我的rm 删除,因为我一开始没有使用git rm
    • 如果在线文档中清楚地说明了这一点,那就太好了(它可能在那里,但显然不明显,或者不会问这个问题)。如果用户走 OS rm 路线,他们知道他们没有做错任何事,这将是一件好事。并且有理由走操作系统路线。例如。如果您需要在提交更改之前删除一个文件以测试某些东西是否有效,那么操作系统路由比使用 git rm 更安全一些,因为在 git 情况下您必须取消该操作,而在操作系统选项中您只需要获取(我相信)。
    【解决方案2】:

    使用rm 删除文件本身不是问题,但是如果您想提交文件已被删除,则无论如何您都必须执行git rm,所以您最好这样做马上行动。

    另外,根据你的shell,在删除文件后执行git rm,你不会得到tab-completion,所以你必须自己拼出路径,而如果你git rm,而文件仍然存在, tab 补全将正常工作。

    【讨论】:

      【解决方案3】:

      git rm 将从索引和工作目录中删除文件(如果您使用了--cached,则只有索引),以便为下一次提交分阶段删除。

      【讨论】:

        【解决方案4】:

        除了安迪的回答之外,git rm 还有其他实用程序:

        1. 安全:当使用git rm 而不是rm 时,如果文件的HEAD 版本与暂存索引或工作树版本。此阻止是一种安全机制,可防止删除正在进行的更改。

        2. 保护git rm --dry-run。此选项是一种安全措施,将执行git rm 命令但实际上不会删除文件。相反,它会输出它会删除哪些文件。

        【讨论】:

          【解决方案5】:

          但是,如果你最终使用 rm 而不是 git rm。您可以跳过 git add 并使用以下命令直接提交更改:

          git commit -a

          【讨论】:

            【解决方案6】:

            从索引中删除文件,或者从工作树和索引中删除文件。 git rm 不会仅从您的工作目录中删除文件。

            以下是使用rm -f 删除文件然后使用git rm 将其从索引中删除的方法

            $ rm -f index.html
            $ git status -s
             D index.html
            $ git rm index.html
            rm 'index.html'
            $ git status -s
            D  index.html
            

            不过,您只需 git rm 即可一次性完成所有操作

            $ git status -s
            $ git rm index.html
            rm 'index.html'
            $ ls
            lib vendor
            $ git status -s
            D  index.html
            

            【讨论】:

              【解决方案7】:

              使用 git rm 时,删除将是您下一次提交的一部分。所以如果你想推动改变,你应该使用 git rm

              【讨论】:

                猜你喜欢
                • 2023-03-09
                • 2012-09-17
                • 2017-06-06
                • 2017-12-16
                • 2010-12-23
                • 2012-09-06
                • 2021-10-06
                • 2019-09-03
                相关资源
                最近更新 更多