可以跟踪或取消跟踪文件。我们开始通过执行“git add”来跟踪文件。
现在让我们假设我们想要停止跟踪文件。我认为“git rm”是要走的路。我的期望是,通过“git rm”我们制作一个文件“未跟踪”。但是,实际上我们完全删除了该文件。为什么?应该怎样做才能使文件无法跟踪(不删除它)。
答案 0 :(得分:3)
停止跟踪文件的命令是git rm --cached
。
请记住,Git使用索引来准备下一次提交。您可以使用git add
将工作树中的文件添加到索引中。
从项目中完全删除文件比删除它更常见。这就是git rm
从项目中完全删除文件的原因,即从工作目录和索引中删除。
为了从存储库中删除文件,实际上是从索引中删除它(或者更好地说,将其标记为已删除),因为这是准备下一个提交的地方。 --cached
选项告诉git rm
。 (请注意,其他命令也使用--cached
来引用存储在索引中的文件副本。)
答案 1 :(得分:1)
为什么git rm
与git 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>...