为什么git-rm与git-add不对?

时间:2017-11-28 13:09:59

标签: git

可以跟踪或取消跟踪文件。我们开始通过执行“git add”来跟踪文件。

现在让我们假设我们想要停止跟踪文件。我认为“git rm”是要走的路。我的期望是,通过“git rm”我们制作一个文件“未跟踪”。但是,实际上我们完全删除了该文件。为什么?应该怎样做才能使文件无法跟踪(不删除它)。

3 个答案:

答案 0 :(得分:3)

停止跟踪文件的命令是git rm --cached

请记住,Git使用索引来准备下一次提交。您可以使用git add将工作树中的文件添加到索引中。

从项目中完全删除文件比删除它更常见。这就是git rm从项目中完全删除文件的原因,即从工作目录和索引中删除。

为了从存储库中删除文件,实际上是从索引中删除它(或者更好地说,将其标记为已删除),因为这是准备下一个提交的地方。 --cached选项告诉git rm。 (请注意,其他命令也使用--cached来引用存储在索引中的文件副本。)

答案 1 :(得分:1)

为什么git rmgit add不相反?在我看来,你正在征求意见 - 特别是git命令的设计者的意见 - 这对于SO来说是不合适的。

唯一的事实答案是,他们不这样做,因为这不是他们设计要做的事情,如相应的手册页中所述。< / p>

git add更新索引中的路径以匹配工作树中的相应路径。这可能意味着在某些时候跟踪新文件(在问题中定义add)。但它也可能意味着从索引中删除文件,它可能意味着将文件的一个版本替换为另一个版本。考虑到这一点,add似乎不是正确的名称;如果它有什么&#34;添加变化&#34;。

但是否它是否是命令的最佳名称,单个命令执行所有更新是一件好事 - 无论是&#34;添加文件& #34;或&#34;删除文件&#34;或者是其他东西。有一个原因git add .是一个经常使用的命令,我不想用一系列命令替换它,在那里我找出我删除的文件,所以我可以rm他们分开等等。

由于add是较旧的命令,因此,如果您想要定义&#34;与add&#34;相反的......那会是什么?将索引还原为以前的状态?以前哪个州?如果我对foo进行了分阶段和非暂停更改,并且我说git add foo,则git没有信息来执行特定add的反转。

其他答案进一步指出&#34;与添加&#34;相反的含糊不清。有些人认为你的意思是'#34;删除文件&#34; (git rm --cached -- path)和其他人认为你的意思是&#34;删除更改&#34; (git reset HEAD -- path)。即使您明确表示您正在谈论&#34;追踪&#34;和&#34;未跟踪&#34;。

git rm被更好地理解为* nix rm命令的一个版本,其中添加了用于处理索引的功能,而不是其功能与add

答案 2 :(得分:0)

要使用git add将您添加到暂存文件列表的文件取消暂存,您可以使用

git reset HEAD <file>...