【问题标题】:Undo git rm . -r --cached or commit changes?撤消 git rm 。 -r --cached 或提交更改?
【发布时间】:2014-04-08 12:53:34
【问题描述】:

我试图让我的 .gitingore 工作(Link to the question :))。

我刚刚做完

git rm . -r --cached 

现在当我输入时,我有一个完整的已删除文件列表:

git status -s 

这正常吗? 我可以安全地提交所有更改吗?

或者也许有办法撤消这个命令?

PS:我试图了解这个命令的作用,但我只发现了这个:http://brianloomis.wordpress.com/2009/08/10/git-rm-r-cached/ 对我来说不是很清楚。

PS 2:好的 :) 为了保存我的皮肤,我进行了重置:

git reset HEAD *

已删除的文件再见了 :) 在 git status -s 中不再可见。 但是仍然可以安全地执行命令:

git rm . -r --cached and then add and commit it? 

【问题讨论】:

    标签: git gitignore git-rm


    【解决方案1】:

    “安全”?它所做的是清空索引并提交删除这些文件,而不将它们从工作树(您的磁盘)中删除

    这意味着所有这些文件都无法跟踪(私有)。

    通常,您不会在这样的命令之后提交。您重置(如您所做的那样)。
    这可能会强制将内容驱动程序(如 smudge script)或其他 .gitattributes 指令再次应用于所有文件。

    您可以在 GitHub 帮助页面“Dealing with line endings”中看到该命令。

    git rm --cached -r .
    # Remove everything from the index.
    
    git reset --hard
    # Write both the index and working directory from git's database.
    

    同样,在这种情况下:没有提交,只有重置。

    【讨论】:

    • 将“提交删除”改为“暂存删除”是否正确?
    • @unutbu "stage" 表示在索引(stage)中记录。这就是 git rm --cached 已经做的事情。如果你在那之后提交,你会创建一个新的提交,记录 git repo 中这些文件的删除。
    • 所以如果我在 rm --cached 命令之后添加和提交,我会简单地从存储库中删除所有文件? :O(不确定我是否正确):)
    • @Mr.TK no:如果你在 git rm --cached 之后直接提交,你会记录删除,这意味着任何其他人克隆最新的提交都不会看到那些文件。由于您执行了git rm --cached -r,因此这些文件仍在您的磁盘(工作树)上,但未跟踪。如果您在 git rm 之后立即执行 git add... 这不会有太大作用,但会恢复您刚刚清空的索引。
    • @Mr.TK 是的。我更喜欢git reset(有或没有--hard)在索引中恢复。 git add 可以加“太多”。
    猜你喜欢
    • 1970-01-01
    • 2013-07-20
    • 2011-11-29
    • 2011-12-07
    • 2012-11-21
    • 2021-09-30
    • 2016-01-11
    • 2014-03-05
    相关资源
    最近更新 更多