给定一个 Git 存储库和一个提交的文件a。
我使用 O/S 命令删除文件: $ rm a
调用git status返回:
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: a
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
接下来,我调用git rm其次是git status哪个产生:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: a
Run Code Online (Sandbox Code Playgroud)
Git 的手册页对命令的描述git rm:
从索引或从工作树和索引中删除文件。
根据我的理解,上述命令序列中发生的事情是git rm 将删除文件的更改放入暂存区(我与index同义使用),而不是从中删除某些内容。
我在这里有什么误解?
什么git rm是将更改添加到索引以从工作目录中删除文件。因此,您正在暂存文件的删除。这听起来可能有点奇怪,但这是您能想到的最清晰的方式。
提交包含更改,即您之前暂存的更改。通常的更改包括新文件和文件更改,还包括文件删除。因此,删除文件被视为更改,通过调用git rm您将更改添加到索引中。
这是顺便说一句。为什么你可以使用的东西,喜欢它的原因git add -u,以增加所有未决的改变,也有删除的文件包括:文件去除挂起的更改,所以当你加它,你所添加的变化,以删除该文件。
此外,git rm它还从工作目录中物理删除文件。因此,如果您没有rm先使用删除文件,Git 也会将其从工作目录中删除。如果文件已经被删除,那么 Git 只会暂存删除更改。与此相关的是git rm --cached这也将暂存文件的删除,但不会从工作目录中物理删除文件。因此,这只会暂存更改以删除文件(尽管该更改尚未实际执行)。